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

PG_EXPECTO(3/3) : влияние vm.vfs_cache_pressure на производительность PostgreSQL при нагрузке, имитирующей OLAP.

В данном анализе исследуется влияние параметра ядра Linux vm.vfs_cache_pressure на производительность дисковой подсистемы под аналитической (OLAP) нагрузкой PostgreSQL. На основе данных нагрузочного тестирования сравнивается три значения параметра (50, 100, 150) с целью выявления оптимальной настройки для сценариев работы с большими объемами данных. Глоссарий терминов | Postgres DBA | Дзен GitHub - Комплекс pg_expecto для статистического анализа производительности и нагрузочного тестирования СУБД PostgreSQL Проанализировать параметра vm.vfs_cache_pressure на производительность подсистемы IO для дискового устройства, используемого файловой системой /data. Сводный отчета по нагрузочному тестированию подготовленный pg_pexpecto по окончании нагрузочного тестирования: Ограничивающий фактор: пропускная способность диска (MB/s). Дополнительные наблюдения: Ограничивающий фактор: пропускная способность диска (MB/s). Дополнительные наблюдения: Ограничивающий фактор: пропускная способность диска
Оглавление

В данном анализе исследуется влияние параметра ядра Linux vm.vfs_cache_pressure на производительность дисковой подсистемы под аналитической (OLAP) нагрузкой PostgreSQL. На основе данных нагрузочного тестирования сравнивается три значения параметра (50, 100, 150) с целью выявления оптимальной настройки для сценариев работы с большими объемами данных.

Скорость vs. Стабильность. Находим идеальную точку для нагрузки.
Скорость vs. Стабильность. Находим идеальную точку для нагрузки.

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

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

Часть 1 - Общая постановка исследования и результаты производительности СУБД и инфраструктуры.

Часть 2 - Анализ паттернов производительности инфраструктуры

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

Задача

Проанализировать параметра vm.vfs_cache_pressure на производительность подсистемы IO для дискового устройства, используемого файловой системой /data.

Входные данные для анализа

Сводный отчета по нагрузочному тестированию подготовленный pg_pexpecto по окончании нагрузочного тестирования:

  • Метрики iostat для дискового устройства vdd

Анализ корреляций и типа нагрузки

vm.vfs_cache_pressure = 100

  • Корреляция скорость–IOPS: слабая (0,4128).
  • Корреляция скорость–MB/s: очень высокая (0,8191).
  • Тип нагрузки: аналитическая/ETL, так как наблюдается высокая зависимость от пропускной способности диска, а не от IOPS.

Ограничивающий фактор: пропускная способность диска (MB/s).

Дополнительные наблюдения:

  • Утилизация диска стабильно высокая (89–94%).
  • Задержки чтения/записи умеренные (9–14 мс).
  • Нагрузка на CPU в режиме ожидания I/O (wa) составляет 18–29%.

vm.vfs_cache_pressure = 50

  • Корреляция скорость–IOPS: отрицательная (-0,2879).
  • Корреляция скорость–MB/s: очень высокая (0,8017).
  • Тип нагрузки: аналитическая/ETL с выраженной зависимостью от пропускной способности диска.

Ограничивающий фактор: пропускная способность диска (MB/s).

Дополнительные наблюдения:

  • Утилизация диска близка к максимальной (95–96%).
  • Задержки чтения растут со временем (до 16 мс).
  • Отрицательная корреляция с IOPS указывает на возможные проблемы с CPU, блокировками или памятью.
  • Нагрузка на CPU в режиме ожидания I/O (wa) достигает 31%.

vm.vfs_cache_pressure = 150

  • Корреляция скорость–IOPS: слабая (0,5930).
  • Корреляция скорость–MB/s: очень высокая (0,9735).
  • Тип нагрузки: аналитическая/ETL с сильной зависимостью от пропускной способности диска.

Ограничивающий фактор: пропускная способность диска (MB/s).

Дополнительные наблюдения:

  • Утилизация диска стабильно высокая (89–95%).
  • Задержки чтения/записи низкие (6–11 мс).
  • Нагрузка на CPU в режиме ожидания I/O (wa) снижается к концу теста (до 16%).

Сводные выводы

1. Все три эксперимента показывают схожую картину:

  • Производительность ограничена пропускной способностью диска (MB/s), а не IOPS.
  • Нагрузка носит аналитический/ETL-характер (последовательное чтение/запись больших объёмов данных).

2. Влияние vm.vfs_cache_pressure:

  • Изменение параметра не оказало значительного влияния на тип нагрузки и ограничивающий фактор.
  • Наилучшие показатели задержек и утилизации CPU наблюдаются при значении 150.

3. Рекомендации:

  • Увеличить пропускную способность дисковой подсистемы .
  • Настроить параметры PostgreSQL для аналитических нагрузок (work_mem, maintenance_work_mem, effective_io_concurrency).
  • Рассмотреть использование партиционирования таблиц и параллельного выполнения запросов.

Сравнение метрик диска

Средние значения метрик по экспериментам:

vm.vfs_cache_pressure = 50:

  • utilization: 95,1%
  • r_await: 13,8 мс
  • w_await: 6,6 мс
  • IOPS: 3 490
  • MB/s: 116,1
  • aqu_sz: 43,8
  • cpu_wa: 27,3%

vm.vfs_cache_pressure = 100:

  • utilization: 92,7%
  • r_await: 12,5 мс
  • w_await: 7,0 мс
  • IOPS: 3 513
  • MB/s: 129,6
  • aqu_sz: 40,5
  • cpu_wa: 25,4%

vm.vfs_cache_pressure = 150:

  • utilization: 92,7%
  • r_await: 9,8 мс
  • w_await: 7,3 мс
  • IOPS: 3 570
  • MB/s: 137,5
  • aqu_sz: 33,5
  • cpu_wa: 23,6%

Анализ влияния vfs_cache_pressure:

  1. Задержки и утилизация диска:
  2. r_await последовательно снижается с ростом параметра: 13,8 мс (50) → 12,5 мс (100) → 9,8 мс (150)
  3. w_await незначительно увеличивается: 6,6 мс (50) → 7,0 мс (100) → 7,3 мс (150)
  4. Утилизация диска максимальна при значении 50 (95,1%), при 100 и 150 стабилизируется на уровне 92,7%
  5. Наилучшие показатели задержек чтения достигаются при максимальном значении 150
  6. Связь с пропускной способностью и IOPS:
  7. Пропускная способность (MB/s) монотонно растёт: 116,1 (50) → 129,6 (100) → 137,5 (150)
  8. IOPS также увеличивается: 3 490 (50) → 3 513 (100) → 3 570 (150)
  9. Наблюдается чёткая тенденция: чем выше vfs_cache_pressure, тем выше производительность по пропускной способности
  10. Поведение очереди запросов (aqu_sz):
  11. Длина очереди последовательно уменьшается: 43,8 (50) → 40,5 (100) → 33,5 (150)
  12. Это свидетельствует о более эффективной обработке запросов при высоких значениях параметра
  13. Уменьшение очереди коррелирует со снижением времени ожидания CPU (cpu_wa)

Ключевые выводы:

Увеличение vfs_cache_pressure до 150 даёт наиболее сбалансированные результаты:

  • Наименьшие задержки чтения (9,8 мс против 13,8 мс при 50)
  • Наибольшая пропускная способность (137,5 MB/s против 116,1 при 50)
  • Самая короткая очередь запросов (33,5 против 43,8 при 50)
  • Наименьшая нагрузка на CPU в режиме ожидания (23,6% против 27,3% при 50)

Параметр vfs_cache_pressure оказывает существенное влияние на производительность дисковой подсистемы:

  • Более высокие значения способствуют более агрессивному освобождению кэша
  • Это снижает contention за память и уменьшает задержки
  • Однако может незначительно увеличить задержки записи

Для данной аналитической нагрузки оптимальным является значение 150, которое обеспечивает лучшую пропускную способность при меньших задержках и нагрузке на систему.

Оценка влияния параметра на производительность под OLAP-нагрузкой

1. Влияние vm.vfs_cache_pressure на производительность при аналитической нагрузке

  • Прямое влияние на задержки чтения: увеличение параметра с 50 до 150 снижает среднее время отклика чтения (r_await) на 29% (с 13,8 до 9,8 мс)
  • Улучшение пропускной способности: наблюдается рост MB/s на 18% (со 116,1 до 137,5 МБ/с) при увеличении параметра
  • Оптимизация использования очереди: длина очереди запросов (aqu_sz) сокращается на 24% (с 43,8 до 33,5)
  • Снижение нагрузки на CPU: время ожидания ввода-вывода процессором (cpu_wa) уменьшается на 14% (с 27,3% до 23,6%)
  • Стабилизация утилизации диска: при высоких значениях параметра утилизация стабилизируется на уровне 92,7% против пиковых 95,1% при низком значении

2. Оптимальное значение параметра для различных аспектов производительности

  • Для максимальной пропускной способности (MB/s): значение 150 (137,5 МБ/с против 116,1 при 50)
  • Для минимальных задержек чтения (r_await): значение 150 (9,8 мс против 13,8 при 50)
  • Для баланса задержек чтения/записи: значение 100 (12,5 мс чтение, 7,0 мс запись)
  • Для эффективной утилизации ресурсов: значение 150 (низкая очередь, стабильная утилизация диска, меньшая нагрузка на CPU)
  • Для избежания перегрузки диска: значение 150 (утилизация 92,7% против 95,1% при 50)

3. Рекомендации по настройке для систем с аналогичной конфигурацией

  • Базовое рекомендованное значение: установить vm.vfs_cache_pressure = 150
  • Наиболее сбалансированная производительность для OLAP-нагрузок
  • Максимальная пропускная способность при минимальных задержках чтения
  • Эффективное управление кэшем файловой системы
  • Архитектурные особенности для учёта:
  • 8 CPU ядер позволяют эффективно обрабатывать параллельные операции ввода-вывода
  • Отдельный диск для данных (vdd) минимизирует contention с другими компонентами
  • Аналитическая нагрузка PostgreSQL характеризуется последовательным доступом к большим объёмам данных
  • Дополнительные рекомендации:
  • Мониторинг использования оперативной памяти при изменении параметра
  • Тестирование на пиковых нагрузках для подтверждения стабильности
  • Учёт общего объёма RAM (8 ГБ) при настройке кэширования
  • Альтернативные сценарии настройки:
  • При смешанной нагрузке (OLTP+OLAP) можно рассмотреть значение 100 как компромиссное
  • При ограничениях по оперативной памяти допустимо значение 50, но с ожиданием более высоких задержек
  • Для систем с большим объёмом RAM (16+ ГБ) можно экспериментировать с более высокими значениями (200-500)

Итоговый вывод

Для аналитической нагрузки PostgreSQL на конфигурации с 8 CPU и отдельным диском данных оптимальным является значение vm.vfs_cache_pressure = 150, обеспечивающее наилучший баланс пропускной способности, задержек и эффективности использования ресурсов.

Послесловие

Таким образом, для конфигураций, аналогичных тестовой (8 CPU, отдельный диск данных, аналитическая нагрузка PostgreSQL), значение vm.vfs_cache_pressure = 150 признано оптимальным. Оно обеспечивает максимальную пропускную способность, минимальные задержки чтения и более эффективное использование ресурсов CPU и диска по сравнению со значениями 50 и 100. Данная настройка рекомендуется к применению в продуктивной среде для подобных рабочих нагрузо