Сообщество - Postgres DBA

Postgres DBA

156 постов 27 подписчиков

Популярные теги в сообществе:

4

PG_HAZEL : Корреляционный анализ значений CS (переключения контекста-VMSTAT)

Взято с основного технического канала Postgres DBA (возможны правки в исходной статье).

Ну во-первых это интересно. И полезно при анализе инфраструктуры и производительности СУБД.

Ну во-первых это интересно. И полезно при анализе инфраструктуры и производительности СУБД.

Задача

Провести статистический анализ результатов нагрузочного тестирования для оценки ресурсов CPU.

Предыдущие работы по теме

VMSTAT : признаки конкуренции за ресурсы CPU

PG_HAZEL : Чек-лист проверки инфраструктуры по результатам нагрузочного тестирования СУБД - VMSTAT

Анализ относительного значения переключений контекста (VMSTAT/CS).

Нагрузочное тестирования виртуальной машины - 06

PG_HAZEL : Анализ результатов нагрузочного тестирования для малой ВМ

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

Ось X - точка наблюдения . Ось Y - операционная скорость

Ось X - точка наблюдения . Ось Y - операционная скорость

Чек-лист CPU - ALARM

Нагрузочное тестирования виртуальной машины - 12

PG_HAZEL : Анализ результатов нагрузочного тестирования для большой ВМ

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

Ось X - точка наблюдения . Ось Y - операционная скорость

Ось X - точка наблюдения . Ось Y - операционная скорость

Чек-лист CPU - OK

Показать полностью 8
3

PG_HAZEL : Чек-лист проверки инфраструктуры по результатам нагрузочного тестирования СУБД - VMSTAT

Взято с основного технического канала Postgres DBA (возможны правки в исходной статье).

Проверять заранее, чтобы избежать неожиданностей позднее.

Проверять заранее, чтобы избежать неожиданностей позднее.

Задача

Подготовить список стандартных проверок на соответствие инфраструктуры заданным нагрузкам в ходе нагрузочного тестирования СУБД, по результатам анализа показателей vmstat:

  1. IO

  2. CPU

  3. RAM

PG_HAZEL : Анализ результатов нагрузочного тестирования для малой ВМ

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

Ось X - точка наблюдения . Ось Y - операционная скорость

Ось X - точка наблюдения . Ось Y - операционная скорость

1.Чек-лист IO - OK

2.Чек-лист CPU - WARNING

3.Чек-лист RAM - OK


PG_HAZEL : Анализ результатов нагрузочного тестирования для большой ВМ

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

Ось X - точка наблюдения . Ось Y - операционная скорость

Ось X - точка наблюдения . Ось Y - операционная скорость

1.Чек-лист IO - WARNING

2.Чек-лист CPU - OK

3.Чек-лист RAM - OK

Показать полностью 8
3

PG_HAZEL : Экспериментальная проверка выводов нейросети DeepSeek (показатели cs , sy , us утилиты vmstat )


Процессор - сердце любого компьютера. Сервера СУБД в том числе.

Процессор - сердце любого компьютера. Сервера СУБД в том числе.

Заключение нейросети DeepSeek о связи переключений контекста и производительности СУБД PostgreSQL - НЕ ПОДТВЕРЖДАЕТСЯ ЭКСПЕРИМЕНТАЛЬНЫМИ ДАННЫМИ.

PG_HAZEL : Экспериментальная проверка выводов нейросети DeepSeek - количество переключений контекста (показатель cs утилиты vmstat)


Здоровый CPU - быстрая СУБД.

Здоровый CPU - быстрая СУБД.

Заключение нейросети DeepSeek о связи system time и производительности СУБД PostgreSQL - НЕ ПОДТВЕРЖДАЕТСЯ ЭКСПЕРИМЕНТАЛЬНЫМИ ДАННЫМИ.

PG_HAZEL : Экспериментальная проверка выводов нейросети DeepSeek - системное время (показатель sy утилиты vmstat)

Показать полностью 1
3

PostgreSQL DBA на заметку -ответы нейросети не заменят эксперименты

Вопрос нейросети DeepSeek:

Какое количество переключений контекста (показатель cs , утилиты vmstat) является критичным для СУБД PostgreSQL при ресурсах CPU=2 и RAM=2GB при экспоненциальном росте нагрузки с 5 до 115 сессий pgbench ?

Цитата из ответа:

График TPS: Сначала растет линейно, затем выходит на плато, а после пика (~20-30 сессий) резко падает вниз.

График cs: Сначала пологий, затем его рост резко ускоряется, и он уходит в вертикальный взлет как раз в точке, где TPS начинает падать.

Эти два графика зеркальны друг другу.

Реальные данные эксперимента:

Итог

Реальные данные полностью противоположны выводам нейросети.

Показать полностью 2
2

PG_HAZEL : Анализ результатов нагрузочного тестирования для малой ВМ

Взято с основного технического канала Postgres DBA (возможны правки в исходной статье).

Мал - да удал !

Мал - да удал !

Предыдущие работы по теме

VMSTAT : признаки конкуренции за ресурсы CPU

VMSTAT : признаки конкуренции за ресурсы RAM

VMSTAT : Обнаружение посторонней нагрузки на дисковую подсистему виртуальной машины

PG_HAZEL : анализ СУБД и инфраструктуры по результатам нагрузочного тестирования (малая ВМ)

Задача

Провести комплексный анализ результатов нагрузочного тестирования со стороны метрик производительности СУБД и операционной системы.

Виртуальная машина 06

  • CPU = 2

  • RAM = 2GB

  • Astra Linux 1.7

  • PostgreSQL 15

Сценарий тестирования и нагрузка на СУБД

Mix

  1. Select only : 50% нагрузки

  2. Select + Update : 30% нагрузки

  3. Insert only : 15% нагрузки

Нагрузка

Ось X - тестовая итерация. Ось Y - количество сессий pgbench

Ось X - тестовая итерация. Ось Y - количество сессий pgbench

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

Ось X - точка наблюдения . Ось Y - операционная скорость

Ось X - точка наблюдения . Ось Y - операционная скорость

Классический график изменения операционной скорости в ходе нагрузочного тестирования:

  1. Горизонтальный тренд: производительность не растет

  2. Вертикальный тренд: резкий рост производительности

  3. Горизонтальный тренд: производительность практически не меняется

  4. Нисходящий тренд: производительность снижается с ростом нагрузки

Зависимость операционной скорости от нагрузки на СУБД

Ось X - количество сессий pgbench . Ось Y - операционная скорость

Ось X - количество сессий pgbench . Ось Y - операционная скорость

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

Ось X - точка наблюдения . Ось Y - ожидания СУБД

Ось X - точка наблюдения . Ось Y - ожидания СУБД

Зависимость ожиданий от нагрузки на СУБД

Ось X - количество сессий pgbench . Ось Y - ожидания СУБД

Ось X - количество сессий pgbench . Ось Y - ожидания СУБД

Конкуренция за ресурсы CPU

Абсолютные значения показателей vmstat

Абсолютные значения показателей vmstat

Корреляция показателей vmstat

Корреляция показателей vmstat

procs_r процессы в run queue (готовы к выполнению)

Ось X - точка наблюдения . Ось Y - procs_r процессы в run queue (готовы к выполнению)

Ось X - точка наблюдения . Ось Y - procs_r процессы в run queue (готовы к выполнению)

Результат: Очередь процессов растет

system_cs переключения контекста

Ось X - точка наблюдения . Ось Y - system_cs переключения контекста

Ось X - точка наблюдения . Ось Y - system_cs переключения контекста

Результат: высокая положительная корреляция с операционной скоростью

cpu_sy system time

Ось X - точка наблюдения . Ось Y - cpu_sy system time

Ось X - точка наблюдения . Ось Y - cpu_sy system time

Результат: Высокая корреляция с операционной скоростью.

Результат анализа конкуренции за ресурсы CPU:

  • procs_r процессы в run queue (готовы к выполнению) : постоянно превышает количество ядер CPU

  • cpu_sy system time: Рост значений до 29%

Вычислительные ресурсы виртуальной машины недостаточны для тестовой нагрузки.

Конкуренция за RAM

swap_si swap in (из swap в RAM)

Отсутствует

swap_so swap out (из RAM в swap)

Отсутствует

memory_free свободная RAM

Менее 5% от RAM.

Результат анализа конкуренции за ресурсы RAM:

Для тестовой нагрузки ресурсов RAM - достаточно.

Конкуренция за ресурсы IO

Абсолютные показатели vmstat

Абсолютные показатели vmstat

Корреляция показателей vmstat

Корреляция показателей vmstat

procs_b процессы в uninterruptible sleep (обычно ждут IO)

Ось X - точка наблюдения . Ось Y - procs_b процессы в uninterruptible sleep (обычно ждут IO)

Ось X - точка наблюдения . Ось Y - procs_b процессы в uninterruptible sleep (обычно ждут IO)

Результат: количество процессов ожидающих IO - не растет.

cpu_wa ожидание IO

Ось X - точка наблюдения . Ось Y - cpu_wa ожидание IO

Ось X - точка наблюдения . Ось Y - cpu_wa ожидание IO

Результат: доля времени CPU в ожидания IO снижается.

Результат анализа конкуренции за ресурсы IO:

Подсистема IO настроена оптимально.

Влияние гипервизора на CPU и IO

Абсолютные показатели vmstat

Абсолютные показатели vmstat

Корреляция показателей vmstat

Корреляция показателей vmstat

Влияние на CPU

Отсутствует

Влияние на IO

procs_b процессы в uninterruptible sleep (обычно ждут IO)

Ось X - точка наблюдения . Ось Y - procs_b процессы в uninterruptible sleep (обычно ждут IO)

Ось X - точка наблюдения . Ось Y - procs_b процессы в uninterruptible sleep (обычно ждут IO)

Результат: procs_b процессы в uninterruptible sleep (обычно ждут IO) - не растет

cpu_wa ожидание IO

Ось X - точка наблюдения . Ось Y - cpu_wa ожидание IO

Ось X - точка наблюдения . Ось Y - cpu_wa ожидание IO

Результат: cpu_wa ожидание IO - не растет

Влияние на IO - отсутствует.

  1. Итоговый результат анализа инфраструктуры ВM-06 по итогам нагрузочного тестирования СУБД

  2. Вычислительные ресурсы виртуальной машины недостаточны для тестовой нагрузки.

  3. Для тестовой нагрузки ресурсов RAM - достаточно.

  4. Подсистема IO настроена оптимально.

  5. Влияние гипервизора на CPU - отсутствует.

  6. Продолжение

    PG_HAZEL : Анализ результатов нагрузочного тестирования для большой ВМ

Показать полностью 18
5

"Корреляционный анализ ожиданий СУБД PostgreSQL" : презентации по докладам, не попавшим на конференции PGConf.СПб 2025/Heisenbug 2025 Autum

Корреляционный анализ ожиданий СУБД PostgreSQL - презентация по докладу, не попавшему на конференцию PGConf.СПб 2025 : Презентация-1

Аналогичный , c мелкими отличиями, материал по докладу для конференции Heisenbug 2025 Autum: Презентация-2

Никакой магии , просто математика.

Никакой магии , просто математика.

Фрагмент презентации

Продолжение на основном Дзен-канале , в силу ограничений Пикабу.

Показать полностью 25
2

Особенности анализа ожиданий PostgreSQL и интерпретация показателя "On CPU"

Информации много, важно правильно интерпретировать результаты.

Информации много, важно правильно интерпретировать результаты.

Предисловие

PostgreSQL представляет собой мощную систему управления базами данных, обладающую множеством инструментов мониторинга производительности. Однако стоит отметить одну важную деталь: несмотря на обширные возможности по сбору статистики, PostgreSQL не имеет встроенного механизма явного определения типа ожидания CPU, которое возникает во время выполнения запросов.

Подробности :

Ожидание "On CPU"

Расчет ожидания "On CPU"

Что такое ожидания (Wait Types)?

Ожидания – это ситуации(события), когда выполнение запроса временно блокируется или замедляется из-за внешних факторов, таких как доступ к дисковым ресурсам (IO wait) или получение блокировки (LOCK wait) и т.п. Важность отслеживания типов ожиданий заключается в том, что они позволяют точно идентифицировать узкие места системы и оптимизировать производительность базы данных.

В отличие от некоторых других систем управления базами данных (например, Microsoft SQL Server или Oracle Database), где есть четко выделенные типы ожиданий, такие как «CPU», «I/O» и «Locking», PostgreSQL изначально не поддерживает такого рода детализацию через стандартные инструменты отчетности.

Почему важна классификация ожиданий?

Правильная идентификация типа ожидания помогает более эффективно диагностировать проблемы производительности. Например, если большинство времени тратится на операции ввода-вывода («I/O»), то внимание следует уделить улучшению файловой подсистемы или увеличению объема оперативной памяти. Если же основной причиной задержки является процессорное время («CPU»), то анализ может привести к необходимости оптимизации самих запросов или улучшения индексации таблиц.

Однако, поскольку PostgreSQL не разделяет эти категории явно, важно понимать, какие именно данные отражают состояние использования ресурсов.

Интерпретация показателя "On CPU" в отчётах pgpro_pwr

Отчёт pgpro_pwr предлагает показатель под названием «On CPU». Этот параметр часто интерпретируют неверно, полагая, что он отражает непосредственное использование центрального процессора сервером.

На самом деле значение «On CPU» указывает лишь на тот факт, что запрос активно выполняется и использует ресурсы сервера без видимых задержек со стороны I/O операций или блокировок. Другими словами, данный показатель сигнализирует об отсутствии очевидных причин замедления выполнения запроса за пределами непосредственно самой обработки SQL-команды.

Таким образом, необходимо помнить, что ожидание «On CPU» не говорит напрямую о том, насколько интенсивно используется центральный процессор в момент выполнения конкретного запроса. Вместо этого оно информирует нас о том, что другие возможные причины простоя (ожидания ввода/вывода, получения блокировок и т.п.) отсутствуют, а сама обработка идёт своим чередом.

Как правильно анализировать нагрузку на CPU?

Для того чтобы понять реальную нагрузку на процессор, вызванную выполнением запросов, рекомендуется использовать сторонние средства диагностики операционной системы, такие как утилиты `top`, `htop` или аналогичные решения. Эти инструменты предоставляют точные показатели загрузки каждого ядра процессора и дают возможность сопоставлять статистику процессов с результатами работы PostgreSQL.

Кроме того, дополнительный/косвенный мониторинг запросов можно организовать путём периодического сбора и анализа значений столбца total_time таблицы pg_stat_statements , которая содержит информацию о суммарном времени выполнения всех вызовов различных SQL-операторов.

Сравнивая изменения этих показателей между разными промежутками времени, можно сделать предварительные выводы о нагрузке на процессор.

Итог

В завершении следует подчеркнуть, что отсутствие чёткого разделения типов ожиданий в PostgreSQL требует внимательного подхода к диагностике проблем производительности.

Показать полностью
3

PG_HAZEL : Комплексный анализ инцидента производительности СУБД PostgreSQL

Взято с основного технического канала Postgres DBA (возможны правки в исходной статье).

СУБД это не только software но и не менее важное hardware.

СУБД это не только software но и не менее важное hardware.

Задача

Провести комплексный(СУБД + ОС) анализ причин инцидента производительности СУБД .

Инцидент производительности СУБД

Ось X - точка наблюдения. Ось Y - значение индикатора деградации скорости СУБД

Ось X - точка наблюдения. Ось Y - значение индикатора деградации скорости СУБД

Отчет по инцидентам производительности

incidents_to_timepoint.sh - отчет по инцидентам производительности за период

cd /postgres/scripts/tester/reports/incidents

./incidents_to_timepoint.sh '2025-08-19 10:45' '2025-08-19 12:00'

Время начала инцидента

Фрагмент отчета

Фрагмент отчета

Начало инцидента : 11:50

Корреляционный анализ ожиданий СУБД

cluster_performance.sh - метрики оценки производительности СУБД

cd /postgres/scripts/tester/reports/detailed

./cluster_performance.sh '2025-08-19 10:50' '2025-08-19 11:50'

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

Ось X - точка наблюдения. Ось Y - операционная скорость

Ось X - точка наблюдения. Ось Y - операционная скорость

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

Ось X - точка наблюдения. Ось Y - ожидания СУБД

Ось X - точка наблюдения. Ось Y - ожидания СУБД

Абсолютные значения по скорости и ожиданиям СУБД за период в течении часа до начала инцидента

Абсолютные значения по скорости и ожиданиям СУБД за период в течении часа до начала инцидента

Корреляция по типам ожиданий

Корреляция по типам ожиданий

Ожидания типа IPC

Ось X - точка наблюдения. Ось Y - ожидания типа IPC

Ось X - точка наблюдения. Ось Y - ожидания типа IPC

Ожидания типа Lock

Ось X - точка наблюдения. Ось Y - ожидания типа Lock

Ось X - точка наблюдения. Ось Y - ожидания типа Lock

Результат корреляционного анализ ожиданий СУБД

Наибольшая корреляция по событиям ожидания и снижением скорости СУБД:

  • IPC : Серверный процесс ожидает взаимодействия с другим процессом.

  • Lock : Серверный процесс ожидает тяжёлую блокировку.

Корреляционный анализ метрик оценки производительности инфраструктуры

vmstat.sh - отчет по метрикам vmstat

iostat_cpu.sh - отчет по метрикам iostat для CPU

iostat_device.sh - отчет по метрикам iostat для I/O

./vmstat.sh '2025-08-19 10:50' '2025-08-19 11:50'

./iostat_cpu.sh '2025-08-19 10:50' '2025-08-19 11:50'

lsblk

./iostat_device.sh '2025-08-19 10:50' '2025-08-19 11:50' 'vdb vdc'

VMSTAT

Корреляция между ожиданиями СУБД и метриками vmstat

Корреляция между ожиданиями СУБД и метриками vmstat

Абсолютные значения метрик vmstat

Абсолютные значения метрик vmstat

Корреляция между ожиданиями СУБД и метриками vmstat:

  • r : процессы в run queue (готовы к выполнению)

  • free : свободная RAM

  • buff : буферы

Исторические графики метрик vmstat

r : процессы в run queue (готовы к выполнению)

free : свободная RAM

buff : буферы

iostat_cpu

Корреляция между ожиданиями СУБД и метриками iostat_cpu

Корреляция между ожиданиями СУБД и метриками iostat_cpu

Абсолютные значения метрик iostat_cpu

Абсолютные значения метрик iostat_cpu

Корреляция между ожиданиями СУБД и метриками iostat_cpu: отсутствует

iostat_device (файловая система /data)

Корреляция между ожиданиями СУБД и метриками iostat_device(файловая система /data)

Корреляция между ожиданиями СУБД и метриками iostat_device(файловая система /data)

Абсолютные значения метрик iostat_device (файловая система /data)

Абсолютные значения метрик iostat_device (файловая система /data)

Корреляция между ожиданиями СУБД и метриками iostat_device(файловая система /data) : отсутствует

iostat_device (файловая система /wal)

Результаты аналогичны.

Корреляция между ожиданиями СУБД и метриками iostat_device(файловая система /wal) : отсутствует

Результат корреляционного анализа метрик оценки производительности инфраструктуры

Аномальная корреляция и влияние инфраструктуры на рост ожидания СУБД - не установлено.

SQL-запросы для оптимизации по результатам отчета incidents_to_timepoint.sh

Ожидания(wait_event_type / wait_event) в ходе инцидента

Наибольшее количество запросов в ходе инцидента имеет ожидание IPC / BgWorkerShutdown

Наибольшее количество запросов в ходе инцидента имеет ожидание IPC / BgWorkerShutdown

SQL-запросы для оптимизации

Наибольшая доля ожиданий IPC у SQL запроса 187233199925020157

Наибольшая доля ожиданий IPC у SQL запроса 187233199925020157

Текст запроса

Фрагмент полного списка SQL-запросов

Фрагмент полного списка SQL-запросов

Корреляционный анализ отдельного SQL-запроса

queryid = 187233199925020157

queryid_stat.sh - события ожидания по заданному SQL-запросу за период

cd /postgres/scripts/tester/reports/detailed

./queryid_stat.sh 187233199925020157 '2025-08-19 10:45' '2025-08-19 12:00'

События ожидания по SQL-запросу

Наибольшая корреляция и наибольшее количество ожиданий:

BgWorkerShutdown: Ожидание завершения фонового рабочего процесса.

План выполнения запроса

Мероприятия для оптимизации SQL-запроса

Добавить индекс в таблицу используемую для представления VIEW_1

PG_HAZEL : ожидания СУБД PostgreSQL при отсутствии индексов.

Показать полностью 22
Отличная работа, все прочитано!