
На основе методологии и результатов, представленных в статье "PG_EXPECTO: Анализ влияния размера shared_buffers на производительность СУБД PostgreSQL", можно сформулировать и обосновать следующую гипотезу:
Классическая эмпирическая рекомендация "shared_buffers = 25% от объёма оперативной памяти" не подтверждается строгим экспериментом и может считаться научно необоснованной. Основная причина снижения производительности СУБД PostgreSQL при высоком значении hit ratio (доли чтений из кэша) связана с увеличением нагрузки на процессор (CPU) для управления большим буферным пулом и конкуренцией за доступ к данным в памяти, а не с гипотетическими "накладными расходами" на обслуживание самого shared_buffers.
Доказательство на основе методологии и результатов PG_EXPECTO
1.Опровержение универсального правила "25% RAM"
Контекст правила: Это эмпирическое правило родилось в эпоху, когда объем оперативной памяти сервера измерялся гигабайтами, а ядра процессора были одно- или двухъядерными. Оно было призвано предотвратить вытеснение из памяти кэша операционной системы и избежать двойного кэширования.
Данные эксперимента PG_EXPECTO: Статья демонстрирует, что производительность продолжает расти даже после превышения порога в 25% от доступной RAM для определенных типов нагрузок (например, для сценариев, где размер рабочего набора данных близок к объему памяти). Кривая производительности не показывает резкого "обрыва" или падения в этой точке. Оптимальное значение определяется не процентом от RAM, а характером рабочей нагрузки и конфигурацией всей системы.
Вывод: Правило "25%" не является научным законом, а грубым ориентиром для начальной настройки в условиях недостатка данных. PG_EXPECTO показывает, что только нагрузочное тестирование конкретной СУБД на конкретном железе с конкретными запросами даёт истинный оптимум.
2.Идентификация реальной причины снижения производительности — нагрузка на CPU
Ожидаемое поведение vs. Реальность: Согласно устаревшему мнению, слишком большой
shared_buffersдолжен создавать "накладные расходы" на управление. Однако статья, позволяет увидеть иную картину.Анализ производительности: Физические чтения с диска (
shared read) практически исчезают. Логично ожидать, что производительность будет линейно расти, но этого не происходит. Рост замедляется, а в сценариях с высокой конкурентностью (22 сессии) может начаться деградация.-
Смещение узкого места: PG_EXPECTO позволяет зафиксировать, что узкое место смещается с подсистемы ввода-вывода (I/O) на центральный процессор (CPU). При отсутствии I/O-ожиданий основным потребителем времени становится:
Поиск и блокировки в памяти: Конкуренция (latch contention) за доступ к хэш-таблице буферного кэша и буферам данных.
Потребление CPU планировщиком: Обработка самих запросов, которым теперь не нужно ждать данные с диска.
Ключевое доказательство: Если бы проблема была в "накладных расходах на обслуживание буфера", мы бы видели рост накладных издержек в самой СУБД. Однако производительность упирается в 100% утилизацию ядер CPU, что чётко отслеживается средствами мониторинга ОС (
vmstat).
Практический вывод
Гипотеза подтверждается методологией PG_EXPECTO, которая заменяет мифы измеряемыми данными.
Рекомендация "25% RAM" — не догма. Она должна быть отправной точкой, а не финальной настройкой. Оптимум может находиться как ниже, так и значительно выше этого значения.
Главный враг при настройке
shared_buffers— не абстрактные "накладные расходы", а реальная нехватка ресурсов CPU и конкуренция за доступ к памяти. После устранения I/O как узкого места, именно процессор становится лимитирующим фактором.Стратегия настройки должна быть итеративной: Увеличивайте
shared_buffersмониторя не толькоhit ratio, но и нагрузку на CPU, время отклика и конкуренцию . Эксперимент останавливается не когда достигнут некий магический процент, а когда прирост производительности становится незначительным или начинает падать из-за нехватки других ресурсов (CPU, memory).
Таким образом, PG_EXPECTO не просто анализирует один параметр, а демонстрирует системный подход: изменение одного ресурса (памяти) выявляет ограничения в другом (CPU), что и является признаком научно обоснованной настройки производительности.
Комментарии (4)

pg_expecto Автор
14.12.2025 16:13А вы что, можете привести пример эмпирической рекомендации, которая обоснована научно? Эти термины вообще взаимоисключающи - либо эдак, либо так, но ни в коем случае не одновременно.
1) Эмпирическое правило - все предметы в воде весят легче. Научное обоснование - Закон Архимеда.
2) Эмпирическое правило - чем больше сжимается пружина, тем большую силу необходимо приложить для сжатия. Научное обоснование - Закон Гука.
3) Эмпирическое правило - предмет, брошенный вверх всегда падает вниз. Научное обоснование - Закон всемирного тяготения Ньютона.

Akina
14.12.2025 16:13Ну не надо путать причину и следствие. Приведённые вами эмпирические зависимости - это следствие тех законов, который вы почему-то считаете всего лишь обоснованием.

Mapar
14.12.2025 16:13Я ожидал от статьи объяснения исходя из внутреннего устройства PG, а получил мы померили своей измерялкой, эмпирическое правило не догма.
Иными словами я эмпирическое правило поменял не на знания, а на 3 эмпирических правила из вывода в конце статьи.
Akina
??? o_O
А вы что, можете привести пример эмпирической рекомендации, которая обоснована научно? Эти термины вообще взаимоисключающи - либо эдак, либо так, но ни в коем случае не одновременно.