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

PG_EXPECTO: Оптимизация вместо апгрейда - практический кейс увеличения производительности СУБД PostgreSQL на 65% через настройку ОС.

Часто при замедлении работы базы данных первым решением кажется увеличение вычислительных ресурсов: больше ядер, памяти, быстрые диски. Однако существует и другой, более экономичный путь — заглянуть глубже, на уровень операционной системы, управляющей этими ресурсами. Данная статья — это практический разбор реального кейса, где скрупулёзная настройка параметров подсистемы ввода-вывода, кэширования и планировщика задач Linux позволила поднять производительность PostgreSQL на впечатляющие 65%. Без замены железа, без увеличения лицензий, только за счёт грамотной оптимизации «фундамента», на котором работает СУБД. Мы пройдём по всем ключевым экспериментам, от базовых значений до финального результата, и покажем, какие именно настройки стали решающими в этой «бесплатной» победе над latency. GitHub - Комплекс pg_expecto для статистического анализа производительности и нагрузочного тестирования СУБД PostgreSQL Глоссарий терминов | Postgres DBA | Дзен Общие параметры производительности: Парам
Оглавление
От latency — к velocity: как тонкая настройка IO разогнала PostgreSQL на 65%.
От latency — к velocity: как тонкая настройка IO разогнала PostgreSQL на 65%.

☑️Часто при замедлении работы базы данных первым решением кажется увеличение вычислительных ресурсов: больше ядер, памяти, быстрые диски. Однако существует и другой, более экономичный путь — заглянуть глубже, на уровень операционной системы, управляющей этими ресурсами.

Данная статья — это практический разбор реального кейса, где скрупулёзная настройка параметров подсистемы ввода-вывода, кэширования и планировщика задач Linux позволила поднять производительность PostgreSQL на впечатляющие 65%. Без замены железа, без увеличения лицензий, только за счёт грамотной оптимизации «фундамента», на котором работает СУБД. Мы пройдём по всем ключевым экспериментам, от базовых значений до финального результата, и покажем, какие именно настройки стали решающими в этой «бесплатной» победе над latency.

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

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

Тестовая среда, инструменты и конфигурация СУБД:

Тестовый сценарий-1 (SELECT): вес = 0.7

-- scenario1.sql SELECT CREATE OR REPLACE FUNCTION scenario1() RETURNS integer AS $$ DECLARE  test_rec record ;  min_i bigint ;  max_i bigint ;  current_aid bigint ;  current_tid bigint ;  current_bid bigint ;  current_delta bigint ;  counter bigint; BEGIN --------------------------------------------------- --СЦЕНАРИЙ 1 - SELECT ONLY SELECT MAX(aid) INTO max_i FROM pgbench_accounts ; SELECT MIN…
Postgres DBA27 декабря 2025

Тестовый сценарий-2 (UPDATE): вес = 0.2

-- scenario2.sql UPDATE CREATE OR REPLACE FUNCTION scenario2() RETURNS integer AS $$ DECLARE  test_rec record ;  min_i bigint ;  max_i bigint ;  current_aid bigint ;  current_tid bigint ;  current_bid bigint ;  current_delta bigint ;  counter bigint; BEGIN --------------------------------------------------- --СЦЕНАРИЙ 2 - SELECT + UPDATE --1)UPDATE pgbench_accounts SET abalance = abalance…
Postgres DBA27 декабря 2025

Тестовый сценарий-3 (INSERT): вес = 0.1

-- scenario3.sql INSERT CREATE OR REPLACE FUNCTION scenario3() RETURNS integer AS $$ DECLARE  test_rec record ;  min_i bigint ;  max_i bigint ;  current_aid bigint ;  current_tid bigint ;  current_bid bigint ;  current_delta bigint ;  counter bigint; BEGIN --------------------------------------------------- --СЦЕНАРИЙ 3 - INSERT ONLY SELECT MIN(aid) INTO min_i FROM pgbench_accounts ; SELECT…
Postgres DBA27 декабря 2025

Базовые значения параметров 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

Итоговый результат

Сравнительный график изменения операционной скорости в ходе нагрузочного тестирования для Эксперимента-8(SPEED-8) и базовыми значениями параметров IO для Эксперимента-1(SPEED-1)
Сравнительный график изменения операционной скорости в ходе нагрузочного тестирования для Эксперимента-8(SPEED-8) и базовыми значениями параметров IO для Эксперимента-1(SPEED-1)

В результате оптимизации параметров подсистемы ввода-вывода операционной системы производительность СУБД PostgreSQL повысилась в среднем на 65% по сравнению с базовой конфигурацией.

Показатели производительности , ожиданий СУБД и метрик производительности IO в ходе экспериментов

-3

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

График изменения операционной скорости в ходе экспериментов
График изменения операционной скорости в ходе экспериментов

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

График изменения ожидания СУБД в ходе экспериментов
График изменения ожидания СУБД в ходе экспериментов

IOPS

График изменения IOPS в ходе экспериментов
График изменения IOPS в ходе экспериментов

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

График изменения MB/s в ходе экспериментов
График изменения MB/s в ходе экспериментов

Длина очереди (aqu_sz)

График изменения aqu_sz в ходе экспериментов
График изменения aqu_sz в ходе экспериментов

Ожидание по чтению

График изменения  r_await(ms) в ходе экспериментов
График изменения r_await(ms) в ходе экспериментов

Ожидание по записи

График изменения  w_await(ms) в ходе экспериментов
График изменения w_await(ms) в ходе экспериментов

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

Систематическая оптимизация параметров подсистемы IO — таких как настройки кэширования, планировщика операций ввода-вывода и параметров файловой системы — позволила достичь значительного повышения производительности PostgreSQL.

Суммарный эффект от внесённых изменений выразился в среднем увеличении операционной скорости на 65,09% по сравнению с базовой конфигурацией. Наиболее существенный вклад внесли корректировки размера буферов предварительного чтения (read_ahead_kb) и отключение избыточного обновления временных меток файлов (noatime, nodiratime).

Результаты подтверждают - целенаправленная настройка окружения ОС является критически важным этапом развёртывания высоконагруженных СУБД.

P.S. Завершение серии экспериментов по анализу и оптимизации инфраструктуры