☑️Часто при замедлении работы базы данных первым решением кажется увеличение вычислительных ресурсов: больше ядер, памяти, быстрые диски. Однако существует и другой, более экономичный путь — заглянуть глубже, на уровень операционной системы, управляющей этими ресурсами.
Данная статья — это практический разбор реального кейса, где скрупулёзная настройка параметров подсистемы ввода-вывода, кэширования и планировщика задач Linux позволила поднять производительность PostgreSQL на впечатляющие 65%. Без замены железа, без увеличения лицензий, только за счёт грамотной оптимизации «фундамента», на котором работает СУБД. Мы пройдём по всем ключевым экспериментам, от базовых значений до финального результата, и покажем, какие именно настройки стали решающими в этой «бесплатной» победе над latency.
GitHub - Комплекс pg_expecto для статистического анализа производительности и нагрузочного тестирования СУБД PostgreSQL
Глоссарий терминов | Postgres DBA | Дзен
Тестовая среда, инструменты и конфигурация СУБД:
- СУБД: PostgreSQL 17
- Тестовая база данных: pgbench (10GB, простая структура)
- Условия тестирования: параллельная нагрузка от 5 до 22 сессий по каждому тестовому сценарию.
Тестовый сценарий-1 (SELECT): вес = 0.7
Тестовый сценарий-2 (UPDATE): вес = 0.2
Тестовый сценарий-3 (INSERT): вес = 0.1
Базовые значения параметров IO
Общие параметры производительности:
- vm.dirty_ratio = 30
- vm.dirty_background_ratio = 10
Параметры IO-планировщика:
- [none] mq-deadline kyber bfq
Настройки кэширования и буферизации:
- vm.vfs_cache_pressure = 100
Параметры файловой системы:
- /dev/mapper/vg_data-LG_data on /data type ext4 (rw,relatime)
Размер буферов для операций с блочными устройствами
- read_ahead_kb=4096
ℹ️Рекомендации по изменению параметров ОС.
Эксперимент-2: Общие параметры производительности
vm.dirty_ratio=10
vm.dirty_background_ratio=5
Эксперимент-3: Параметры IO-планировщика
[mq-deadline] kyber bfq none
Эксперимент-5: Настройки кэширования и буферизации
vm.vfs_cache_pressure=50
Эксперимент-7: Оптимизация параметров файловой системы
/dev/mapper/vg_data-LG_data on /data type ext4 (rw,noatime,nodiratime)
Эксперимент-8: Изменение размера буферов для операций с блочными устройствами
echo 256 > /sys/block/vdd/queue/read_ahead_kb
Итоговый результат
В результате оптимизации параметров подсистемы ввода-вывода операционной системы производительность СУБД PostgreSQL повысилась в среднем на 65% по сравнению с базовой конфигурацией.
Показатели производительности , ожиданий СУБД и метрик производительности IO в ходе экспериментов
Операционная скорость
Ожидания СУБД
IOPS
Пропускная способность (MB/s)
Длина очереди (aqu_sz)
Ожидание по чтению
Ожидание по записи
Итоговый вывод
Систематическая оптимизация параметров подсистемы IO — таких как настройки кэширования, планировщика операций ввода-вывода и параметров файловой системы — позволила достичь значительного повышения производительности PostgreSQL.
Суммарный эффект от внесённых изменений выразился в среднем увеличении операционной скорости на 65,09% по сравнению с базовой конфигурацией. Наиболее существенный вклад внесли корректировки размера буферов предварительного чтения (read_ahead_kb) и отключение избыточного обновления временных меток файлов (noatime, nodiratime).
Результаты подтверждают - целенаправленная настройка окружения ОС является критически важным этапом развёртывания высоконагруженных СУБД.