PG_HAZEL : Анализ IO с помощью vmstat(b, wa)
Взято с основного технического канала Postgres DBA (возможны правки в исходной статье).
Задача
Провести статистический анализ результатов нагрузочного тестирования для оценки состояния IO.
Взято с основного технического канала Postgres DBA (возможны правки в исходной статье).
Провести статистический анализ результатов нагрузочного тестирования для оценки состояния IO.
Взято с основного технического канала Postgres DBA (возможны правки в исходной статье).
Провести статистический анализ результатов нагрузочного тестирования для оценки ресурсов CPU.
Взято с основного технического канала Postgres DBA (возможны правки в исходной статье).
Подготовить список стандартных проверок на соответствие инфраструктуры заданным нагрузкам в ходе нагрузочного тестирования СУБД, по результатам анализа показателей vmstat:
IO
CPU
RAM
Заключение нейросети DeepSeek о связи переключений контекста и производительности СУБД PostgreSQL - НЕ ПОДТВЕРЖДАЕТСЯ ЭКСПЕРИМЕНТАЛЬНЫМИ ДАННЫМИ.
Заключение нейросети DeepSeek о связи system time и производительности СУБД PostgreSQL - НЕ ПОДТВЕРЖДАЕТСЯ ЭКСПЕРИМЕНТАЛЬНЫМИ ДАННЫМИ.
Какое количество переключений контекста (показатель cs , утилиты vmstat) является критичным для СУБД PostgreSQL при ресурсах CPU=2 и RAM=2GB при экспоненциальном росте нагрузки с 5 до 115 сессий pgbench ?
График TPS: Сначала растет линейно, затем выходит на плато, а после пика (~20-30 сессий) резко падает вниз.
График cs: Сначала пологий, затем его рост резко ускоряется, и он уходит в вертикальный взлет как раз в точке, где TPS начинает падать.
Эти два графика зеркальны друг другу.
Взято с основного технического канала Postgres DBA (возможны правки в исходной статье).
Провести комплексный анализ результатов нагрузочного тестирования со стороны метрик производительности СУБД и операционной системы.
CPU = 2
RAM = 2GB
Astra Linux 1.7
PostgreSQL 15
Mix
Select only : 50% нагрузки
Select + Update : 30% нагрузки
Insert only : 15% нагрузки
Нагрузка
Классический график изменения операционной скорости в ходе нагрузочного тестирования:
Горизонтальный тренд: производительность не растет
Вертикальный тренд: резкий рост производительности
Горизонтальный тренд: производительность практически не меняется
Нисходящий тренд: производительность снижается с ростом нагрузки
Результат: Очередь процессов растет
Результат: высокая положительная корреляция с операционной скоростью
Результат: Высокая корреляция с операционной скоростью.
procs_r процессы в run queue (готовы к выполнению) : постоянно превышает количество ядер CPU
cpu_sy system time: Рост значений до 29%
Вычислительные ресурсы виртуальной машины недостаточны для тестовой нагрузки.
Отсутствует
Отсутствует
Менее 5% от RAM.
Для тестовой нагрузки ресурсов RAM - достаточно.
Результат: количество процессов ожидающих IO - не растет.
Результат: доля времени CPU в ожидания IO снижается.
Подсистема IO настроена оптимально.
Отсутствует
Результат: procs_b процессы в uninterruptible sleep (обычно ждут IO) - не растет
Результат: cpu_wa ожидание IO - не растет
Влияние на IO - отсутствует.
Итоговый результат анализа инфраструктуры ВM-06 по итогам нагрузочного тестирования СУБД
Вычислительные ресурсы виртуальной машины недостаточны для тестовой нагрузки.
Для тестовой нагрузки ресурсов RAM - достаточно.
Подсистема IO настроена оптимально.
Влияние гипервизора на CPU - отсутствует.
Продолжение
PG_HAZEL : Анализ результатов нагрузочного тестирования для большой ВМ
Корреляционный анализ ожиданий СУБД PostgreSQL - презентация по докладу, не попавшему на конференцию PGConf.СПб 2025 : Презентация-1
Аналогичный , c мелкими отличиями, материал по докладу для конференции Heisenbug 2025 Autum: Презентация-2
Продолжение на основном Дзен-канале , в силу ограничений Пикабу.
PostgreSQL представляет собой мощную систему управления базами данных, обладающую множеством инструментов мониторинга производительности. Однако стоит отметить одну важную деталь: несмотря на обширные возможности по сбору статистики, PostgreSQL не имеет встроенного механизма явного определения типа ожидания CPU, которое возникает во время выполнения запросов.
Подробности :
Ожидания – это ситуации(события), когда выполнение запроса временно блокируется или замедляется из-за внешних факторов, таких как доступ к дисковым ресурсам (IO wait) или получение блокировки (LOCK wait) и т.п. Важность отслеживания типов ожиданий заключается в том, что они позволяют точно идентифицировать узкие места системы и оптимизировать производительность базы данных.
В отличие от некоторых других систем управления базами данных (например, Microsoft SQL Server или Oracle Database), где есть четко выделенные типы ожиданий, такие как «CPU», «I/O» и «Locking», PostgreSQL изначально не поддерживает такого рода детализацию через стандартные инструменты отчетности.
Правильная идентификация типа ожидания помогает более эффективно диагностировать проблемы производительности. Например, если большинство времени тратится на операции ввода-вывода («I/O»), то внимание следует уделить улучшению файловой подсистемы или увеличению объема оперативной памяти. Если же основной причиной задержки является процессорное время («CPU»), то анализ может привести к необходимости оптимизации самих запросов или улучшения индексации таблиц.
Однако, поскольку PostgreSQL не разделяет эти категории явно, важно понимать, какие именно данные отражают состояние использования ресурсов.
Отчёт pgpro_pwr предлагает показатель под названием «On CPU». Этот параметр часто интерпретируют неверно, полагая, что он отражает непосредственное использование центрального процессора сервером.
На самом деле значение «On CPU» указывает лишь на тот факт, что запрос активно выполняется и использует ресурсы сервера без видимых задержек со стороны I/O операций или блокировок. Другими словами, данный показатель сигнализирует об отсутствии очевидных причин замедления выполнения запроса за пределами непосредственно самой обработки SQL-команды.
Таким образом, необходимо помнить, что ожидание «On CPU» не говорит напрямую о том, насколько интенсивно используется центральный процессор в момент выполнения конкретного запроса. Вместо этого оно информирует нас о том, что другие возможные причины простоя (ожидания ввода/вывода, получения блокировок и т.п.) отсутствуют, а сама обработка идёт своим чередом.
Для того чтобы понять реальную нагрузку на процессор, вызванную выполнением запросов, рекомендуется использовать сторонние средства диагностики операционной системы, такие как утилиты `top`, `htop` или аналогичные решения. Эти инструменты предоставляют точные показатели загрузки каждого ядра процессора и дают возможность сопоставлять статистику процессов с результатами работы PostgreSQL.
Кроме того, дополнительный/косвенный мониторинг запросов можно организовать путём периодического сбора и анализа значений столбца total_time таблицы pg_stat_statements , которая содержит информацию о суммарном времени выполнения всех вызовов различных SQL-операторов.
Сравнивая изменения этих показателей между разными промежутками времени, можно сделать предварительные выводы о нагрузке на процессор.
В завершении следует подчеркнуть, что отсутствие чёткого разделения типов ожиданий в PostgreSQL требует внимательного подхода к диагностике проблем производительности.
