Найти в Дзене
Postgres DBA

PG_EXPECTO 5.1: Влияние vm.dirty_expire_centisecs=3000/1000/2000 на производительность PostgreSQL.

В отчете представлены результаты серии экспериментов по оценке воздействия настройки кэша записи ядра Linux (vm.dirty_expire_centisecs) на производительность СУБД PostgreSQL и дискового массива /data в условиях аналитической (OLAP) нагрузки с преобладанием операций чтения. Глоссарий терминов | Postgres DBA | Дзен GitHub - Комплекс pg_expecto для статистического анализа производительности и нагрузочного тестирования СУБД PostgreSQL Провести сравнительный анализ влияния изменения параметра vm.dirty_expire_centisecs на производительность СУБД и подсистемы IO settings.txt - конфигурация СУБД и инфраструктуры 1.summary.vmstat.txt - показатели производительности СУБД и vmstat в ходе эксперимента-1 2.summary.vmstat.txt - показатели производительности СУБД и vmstat в ходе эксперимента-2 3.summary.vmstat.txt - показатели производительности СУБД и vmstat в ходе эксперимента-3 Проанализируй данные по метрикам инфраструктуры vmstat. Подготовь сравнительный итоговый отчет по результатам анализа про
Оглавление
Настройка кэша не решает проблем перегруженных артерий системы
Настройка кэша не решает проблем перегруженных артерий системы

В отчете представлены результаты серии экспериментов по оценке воздействия настройки кэша записи ядра Linux (vm.dirty_expire_centisecs) на производительность СУБД PostgreSQL и дискового массива /data в условиях аналитической (OLAP) нагрузки с преобладанием операций чтения.

Глоссарий терминов | Postgres DBA | Дзен

GitHub - Комплекс pg_expecto для статистического анализа производительности и нагрузочного тестирования СУБД PostgreSQL

Начало, детали эксперимента и конфигурация СУБД и Виртуальной Машины

Задача

Провести сравнительный анализ влияния изменения параметра vm.dirty_expire_centisecs на производительность СУБД и подсистемы IO

Операционная скорость

Изменение операционной скорости СУБД в ходе нагрузочного тестирования
Изменение операционной скорости СУБД в ходе нагрузочного тестирования

Ожидания СУБД

Изменение ожиданий СУБД в ходе нагрузочного тестирования
Изменение ожиданий СУБД в ходе нагрузочного тестирования

IOPS (Производительность IO)

Изменение производительности IO(IOPS) в ходе нагрузочного тестирования
Изменение производительности IO(IOPS) в ходе нагрузочного тестирования

MB/s (Пропускная способность IO)

Изменение пропускной способности IO(MB/s) в ходе нагрузочного тестирования
Изменение пропускной способности IO(MB/s) в ходе нагрузочного тестирования

Сравнительный анализ производительности и ожиданий СУБД и метрик vmstat

settings.txt - конфигурация СУБД и инфраструктуры
1.summary.vmstat.txt - показатели производительности СУБД и vmstat в ходе эксперимента-1
2.summary.vmstat.txt - показатели производительности СУБД и vmstat в ходе эксперимента-2
3.summary.vmstat.txt - показатели производительности СУБД и vmstat в ходе эксперимента-3
Проанализируй данные по метрикам инфраструктуры vmstat.
Подготовь сравнительный итоговый отчет по результатам анализа производительности инфраструктуры.
Подготовь итоговый вывод о влиянии значения параметра vm.dirty_expire_centisecs на инфраструктуры для данного характера нагрузки и заданных параметров операционной системы.
Исключи из отчета рекомендации по оптимизации.
Для построения отчета используй списки , а не таблицы

Сравнительный анализ производительности инфраструктуры по результатам экспериментов с vm.dirty_expire_centisecs

Общая характеристика нагрузки

  • Тип нагрузки: OLAP-сценарий (соотношение чтения к записи > 2.7:1)
  • Проблемная зона: Высокая нагрузка на подсистему I/O
  • Ресурсы:
    CPU: 8 ядер
    RAM: 8 ГБ
    Диски: отдельные разделы для данных (/data) и WAL (/wal)

Ключевые метрики производительности по экспериментам

Эксперимент 1 (vm.dirty_expire_centisecs = 3000)

  • Корреляция IO-wa: 0,9393 (очень высокая)
  • Корреляция IO-b: 0,9757 (очень высокая)
  • Процессы в состоянии D (ожидание IO): превышают количество ядер CPU в 42,99% наблюдений
  • Угол наклона регрессии: 43,65
  • Соотношение чтение/запись: 2,91:1
  • Свободная RAM <5%: 100% наблюдений
  • wa >10%: 100% наблюдений

Эксперимент 2 (vm.dirty_expire_centisecs = 1000)

  • Корреляция IO-wa: 0,9619 (очень высокая)
  • Корреляция IO-b: 0,9744 (очень высокая)
  • Процессы в состоянии D (ожидание IO): превышают количество ядер CPU в 37,61% наблюдений
  • Угол наклона регрессии: 43,17
  • Соотношение чтение/запись: 2,80:1
  • Свободная RAM <5%: 100% наблюдений
  • wa >10%: 100% наблюдений

Эксперимент 3 (vm.dirty_expire_centisecs = 2000)

  • Корреляция IO-wa: 0,9660 (очень высокая)
  • Корреляция IO-b: 0,9802 (очень высокая)
  • Процессы в состоянии D (ожидание IO): превышают количество ядер CPU в 40,74% наблюдений
  • Угол наклона регрессии: 43,52
  • Соотношение чтение/запись: 2,70:1
  • Свободная RAM <5%: 100% наблюдений
  • wa >10%: 100% наблюдений

Сравнительный анализ

Общие проблемы для всех экспериментов

  • Критическая нехватка свободной оперативной памяти (менее 5% во всех наблюдениях)
  • Высокое время ожидания I/O (wa >10% во всех наблюдениях)
  • Большое количество процессов в состоянии непрерываемого сна (ожидание дисковых операций)
  • Сильная корреляция между ожиданиями СУБД и метриками vmstat (IO-wa, IO-b, IO-bi, IO-bo)
  • Высокая зависимость производительности от операций чтения с диска

Динамика изменений при разных значениях параметра

  1. Количество процессов в состоянии D:
    Наименьшее значение в эксперименте 2 (37,61%)
    Наибольшее значение в эксперименте 1 (42,99%)
    Промежуточное значение в эксперименте 3 (40,74%)
  2. Угол наклона регрессии:
    Наименьший в эксперименте 2 (43,17)
    Наибольший в эксперименте 1 (43,65)
    Промежуточный в эксперименте 3 (43,52)
  3. Корреляционные показатели:
    Все эксперименты демонстрируют очень высокие значения корреляции (>0,93)
    Незначительные колебания между экспериментами

Итоговый вывод о влиянии vm.dirty_expire_centisecs

На основе анализа трех экспериментов с различными значениями параметра vm.dirty_expire_centisecs (3000, 1000 и 2000) можно сделать следующие выводы:

  1. Параметр оказывает ограниченное влияние на общую картину производительности инфраструктуры при данном характере нагрузки. Все три эксперимента демонстрируют сходные проблемы с производительностью I/O.
  2. Эксперимент с наименьшим значением параметра (1000) показывает несколько лучшие показатели по количеству процессов в состоянии непрерываемого сна и углу наклона регрессии, что может указывать на более предсказуемое поведение подсистемы ввода-вывода.
  3. Изменение параметра не решает фундаментальных проблем производительности, наблюдаемых во всех экспериментах:
    Критическая нехватка оперативной памяти
    Высокая нагрузка на подсистему I/O
    Сильная зависимость производительности от операций чтения с диска
  4. Различия между экспериментами не являются радикальными, что свидетельствует о том, что значение параметра vm.dirty_expire_centisecs не является основным ограничивающим фактором производительности в данной конфигурации системы и при данном типе нагрузки.
  5. Характер нагрузки (OLAP-сценарий с преобладанием операций чтения) создает условия, при которых влияние параметра vm.dirty_expire_centisecs проявляется незначительно на фоне более существенных ограничений, связанных с конфигурацией памяти и производительностью дисковых подсистем.

Анализ производительности IO для файловой системы /data

settings.txt - конфигурация СУБД и инфраструктуры
1.io_performance.txt - показатели производительности IO в ходе эксперимента-1
2.io_performance.txt - показатели производительности IO в ходе эксперимента-2
3.io_performance.txt - показатели производительности IO в ходе эксперимента-3
Подготовь сравнительный отчет по результатам анализа производительности подсистемы IO в ходе экспериментов для дисковых устройств, используемых для файловой системы /data
**Общая характеристика системы**
- Тип нагрузки
Состав отчета по файловой системе:
**Критические проблемы производительности по файловой системе**
**Анализ корреляций и паттернов нагрузки по файловой системе**
**Диагностика узких мест IO по файловой системе**
- r_await(ms)
- w_await(ms)
- aqu_sz
- proc_b
- cpu_wa(%)
- Корреляция speed с IOPS
- Корреляция speed с пропускной способностью (MB/s)
- Вывод по диагностике узких мест IO
Подготовь итоговый вывод о влиянии значения параметра vm.dirty_expire_centisecs на производительности подсистемы IO для данного характера нагрузки и заданных параметров СУБД и операционной системы.
Исключи из отчета рекомендации по оптимизации.
Для построения отчета используй списки , а не таблицы.

Сравнительный отчет по производительности подсистемы IO для файловой системы /data (диск vdd)

Общая характеристика системы

Характеристики сервера:

  • CPU: 8 ядер
  • RAM: 8 GB
  • Диск vdd: 100 GB LVM для /data
  • Диск vdc: 50 GB LVM для /wal

Настройки СУБД PostgreSQL:

  • Максимальное количество соединений: 1000
  • Параметры памяти: work_mem=32MB, maintenance_work_mem=512MB, effective_cache_size=6GB
  • Настройки autovacuum: агрессивные (naptime=1s, max_workers=4)
  • Настройки WAL: агрессивные (min_wal_size=2GB, max_wal_size=32GB)
  • Параметры производительности: random_page_cost=1.1, effective_io_concurrency=300

Тип нагрузки:

  • OLAP-сценарий (соотношение чтения к записи >2.7:1)
  • Высокая нагрузка на чтение данных
  • Интенсивная запись WAL и фоновые операции

Сравнительный анализ трех экспериментов

Критические проблемы производительности по файловой системе /data

Общие для всех экспериментов проблемы:

  • Утилизация диска постоянно 100% во всех наблюдениях
  • Глубина очереди запросов (aqu_sz) постоянно превышает 1
  • Процент времени ожидания CPU для IO (cpu_wa) постоянно >50%
  • Количество процессов в состоянии ожидания IO (proc_b) превышает количество CPU ядер в 25-50% наблюдений

Проблемы, не зависящие от vm.dirty_expire_centisecs:

  • Очень высокая корреляция между ожиданием IO и загрузкой диска (0.92-0.94)
  • Высокое соотношение операций чтения к записи (2.7-2.9:1)
  • Производительность напрямую зависит от операций чтения с диска

Анализ корреляций и паттернов нагрузки по файловой системе /data

Общие паттерны во всех экспериментах:

  • Высокая корреляция скорости операций с количеством прочитанных блоков (0.96-0.99)
  • Отрицательная корреляция скорости операций с IOPS (-0.42 до -0.81)
  • Отрицательная корреляция скорости операций с пропускной способностью (-0.66 до -0.90)
  • Высокая корреляция между кэшированием и чтением с диска (0.98-0.99)

Изменения между экспериментами:

  • Корреляция между использованием буферной памяти и операциями чтения менялась:
    Эксперимент-1: 0.00 (отсутствует)
    Эксперимент-2: -0.81 (отрицательная)
    Эксперимент-3: 0.61 (положительная)

Диагностика узких мест IO по файловой системе /data

r_await(ms):

  • Во всех экспериментах: 1-7 ms (в основном 1-2 ms)
  • Менее 25% наблюдений превышают 5 ms
  • Значения стабильны между экспериментами

w_await(ms):

  • Во всех экспериментах: 1-15 ms (в основном 1-3 ms)
  • Менее 25% наблюдений превышают 5 ms
  • Значения стабильны между экспериментами

aqu_sz (средняя длина очереди):

  • Постоянно выше 1 во всех наблюдениях
  • Диапазон: 6-38 в эксперименте-1, 6-36 в эксперименте-2, 7-34 в эксперименте-3
  • Максимальные значения схожи между экспериментами

proc_b (процессы в ожидании IO):

  • Превышает количество CPU ядер в 25-50% наблюдений
  • Значения: 5-8 процессов
  • Стабильно высокие во всех экспериментах

cpu_wa(%):

  • Постоянно >10% во всех наблюдениях
  • Диапазон: 50-71% во всех экспериментах
  • Максимальные значения схожи между экспериментами

Корреляция speed с IOPS:

  • Эксперимент-1: -0.70 (отрицательная)
  • Эксперимент-2: -0.81 (отрицательная)
  • Эксперимент-3: -0.42 (отрицательная)
  • Во всех случаях отрицательная корреляция

Корреляция speed с пропускной способностью (MB/s):

  • Эксперимент-1: -0.87 (отрицательная)
  • Эксперимент-2: -0.90 (отрицательная)
  • Эксперимент-3: -0.66 (отрицательная)
  • Во всех случаях отрицательная корреляция

Вывод по диагностике узких мест IO:

  • Узкое место не в производительности диска по IOPS или пропускной способности
  • Отрицательные корреляции указывают на другие ограничения (CPU, блокировки, память)
  • Высокие значения cpu_wa и aqu_sz подтверждают, что процессы ожидают IO, но не из-за медленного отклика диска

Итоговый вывод о влиянии vm.dirty_expire_centisecs

Минимальное влияние на производительность IO:

  • Изменение параметра vm.dirty_expire_centisecs (3000, 1000, 2000) не оказало существенного влияния на ключевые метрики производительности IO
  • Все основные показатели (utilization, cpu_wa, aqu_sz, r_await, w_await) оставались на схожих уровнях во всех экспериментах
  • Характер нагрузки и паттерны использования диска не изменились

Причины отсутствия значимого эффекта:

  • Диск vdd постоянно работает на 100% утилизации независимо от настройки
  • Нагрузка определяется в первую очередь рабочим набором данных и запросами СУБД
  • Параметр vm.dirty_expire_centisecs влияет на поведение кэша записи, но в условиях постоянной 100% загрузки диска этот эффект минимален
  • Основное узкое место системы не в подсистеме IO, а в других компонентах (о чем свидетельствуют отрицательные корреляции speed с IOPS и MB/s)

Общий вывод:
Для данной конфигурации системы и характера нагрузки (OLAP с интенсивным чтением, постоянная 100% утилизация диска) изменение параметра vm.dirty_expire_centisecs в диапазоне 1000-3000 сантисекунд не приводит к значимым изменениям в производительности подсистемы IO. Критические проблемы производительности сохраняются независимо от значения этого параметра.

Послесловие

В рамках проведенных тестов параметр vm.dirty_expire_centisecs не проявил себя как значимый фактор, влияющий на производительность. Проблемы инфраструктуры носили более фундаментальный характер.