В отчете представлены результаты серии экспериментов по оценке воздействия настройки кэша записи ядра Linux (vm.dirty_expire_centisecs) на производительность СУБД PostgreSQL и дискового массива /data в условиях аналитической (OLAP) нагрузки с преобладанием операций чтения.
Глоссарий терминов | Postgres DBA | Дзен
GitHub - Комплекс pg_expecto для статистического анализа производительности и нагрузочного тестирования СУБД PostgreSQL
Начало, детали эксперимента и конфигурация СУБД и Виртуальной Машины
Задача
Провести сравнительный анализ влияния изменения параметра vm.dirty_expire_centisecs на производительность СУБД и подсистемы IO
Операционная скорость
Ожидания СУБД
IOPS (Производительность IO)
MB/s (Пропускная способность IO)
Сравнительный анализ производительности и ожиданий СУБД и метрик 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)
- Высокая зависимость производительности от операций чтения с диска
Динамика изменений при разных значениях параметра
- Количество процессов в состоянии D:
Наименьшее значение в эксперименте 2 (37,61%)
Наибольшее значение в эксперименте 1 (42,99%)
Промежуточное значение в эксперименте 3 (40,74%) - Угол наклона регрессии:
Наименьший в эксперименте 2 (43,17)
Наибольший в эксперименте 1 (43,65)
Промежуточный в эксперименте 3 (43,52) - Корреляционные показатели:
Все эксперименты демонстрируют очень высокие значения корреляции (>0,93)
Незначительные колебания между экспериментами
Итоговый вывод о влиянии vm.dirty_expire_centisecs
На основе анализа трех экспериментов с различными значениями параметра vm.dirty_expire_centisecs (3000, 1000 и 2000) можно сделать следующие выводы:
- Параметр оказывает ограниченное влияние на общую картину производительности инфраструктуры при данном характере нагрузки. Все три эксперимента демонстрируют сходные проблемы с производительностью I/O.
- Эксперимент с наименьшим значением параметра (1000) показывает несколько лучшие показатели по количеству процессов в состоянии непрерываемого сна и углу наклона регрессии, что может указывать на более предсказуемое поведение подсистемы ввода-вывода.
- Изменение параметра не решает фундаментальных проблем производительности, наблюдаемых во всех экспериментах:
Критическая нехватка оперативной памяти
Высокая нагрузка на подсистему I/O
Сильная зависимость производительности от операций чтения с диска - Различия между экспериментами не являются радикальными, что свидетельствует о том, что значение параметра vm.dirty_expire_centisecs не является основным ограничивающим фактором производительности в данной конфигурации системы и при данном типе нагрузки.
- Характер нагрузки (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 не проявил себя как значимый фактор, влияющий на производительность. Проблемы инфраструктуры носили более фундаментальный характер.