Диагностика производительности PostgreSQL
Performance Diagnostics — это функция сбора и визуализации статистики производительности кластеров PostgreSQL. Она позволяет анализировать производительность SQL-запросов и активность сессий для выявления узких мест и оптимизации работы базы данных.
Перед началом работы
Убедитесь, что:
- Установлен компонент Managed PostgreSQL.
- Установлен и активен компонент Managed ClickHouse®.
- Установлен компонент Monitoring с Grafana.
- У вас есть права на изменение конфигурации
ManagedPostgresConfigи создание кластеровPostgresqlCluster.
Включение диагностики на уровне платформы
Чтобы включить функцию Performance Diagnostics для всех PostgreSQL кластеров выполните команду:
kubectl patch ManagedPostgresConfigs main --type='merge' -p='{"spec":{"settings": {"performance-diagnostics":{"enabled":true}}}}'
После включения функции на уровне платформы будут развернуты необходимые компоненты для сбора и хранения метрик (ClickHouse®, Grafana dashboard).
Включение сбора статистики для кластера
После включения функции на уровне платформы необходимо включить сбор статистики для каждого кластера отдельно.
Чтобы включить сбор статистики для PostgreSQL кластера:
-
Создайте или обновите спецификацию кластера
PostgresqlCluster:apiVersion: postgresql.stackland.yandex.cloud/v1
kind: PostgresqlCluster
metadata:
name: my-postgres-cluster
namespace: default
spec:
instances: 3
enablePerfDiagStatsCollect: truestorage:
size: 10Gipostgresql:
parameters:
max_connections: "100"
shared_buffers: "256MB"Где
enablePerfDiagStatsCollect: trueвключает сбор статистики производительности для данного кластера. -
Примените конфигурацию:
kubectl apply -f postgresql-cluster.yaml -
Дождитесь перезапуска подов кластера. Проверить статус можно командой:
kubectl get pods -l postgresql=my-postgres-cluster
После включения в каждом поде кластера будет запущен sidecar-контейнер perfdiag, который собирает статистику из PostgreSQL и отправляет ее в ClickHouse®.
Просмотр данных в Grafana
Чтобы просмотреть собранные метрики производительности:
-
Откройте Grafana.
-
В меню слева выберите Dashboards.
-
Найдите и откройте дашборд PostgreSQL Cluster Performance Diagnostics.
-
В верхней части дашборда выберите:
- Cluster — имя кластера.
- Time range — временной диапазон для анализа.
Панели дашборда
Дашборд содержит следующие разделы и панели:
Sessions activity statistics
Sessions stats (for the moment of interval end) — таблица с информацией о текущих сессиях PostgreSQL на момент окончания выбранного интервала времени. Содержит данные о:
- Времени сбора данных (
collect_time). - Хосте и роли хоста (
host,host_role). - Базе данных и пользователе (
database,user). - Состоянии сессии (
state). - Выполняемом запросе (
query). - Идентификаторе процесса (
pid). - Приложении и клиенте (
application_name,client_addr,client_hostname,client_port). - Событиях ожидания (
wait_event_type,wait_event). - Временных метках (
backend_start,xact_start,query_start,state_change). - Идентификаторах транзакций (
backend_xid,backend_xmin). - Типе бэкенда (
backend_type). - Блокирующих процессах (
blocking_pids). - Идентификаторе запроса (
queryid).
Per-statement statistics
Раздел содержит графики временных рядов и таблицу со статистикой выполнения SQL-запросов.
Графики временных рядов:
- Top queries by average execution time — топ запросов по среднему времени выполнения (в миллисекундах).
- Top queries by consumed CPU user time — топ запросов по потреблению процессорного времени в пользовательском режиме (в ядрах CPU).
- Top queries by consumed CPU system time — топ запросов по потреблению процессорного времени в системном режиме (в ядрах CPU).
- Top queries by avg rows scanned — топ запросов по среднему количеству просканированных строк.
- Top queries by reads from filesystem — топ запросов по объему чтения из файловой системы (в байтах).
- Top queries by writes to filesystem — топ запросов по объему записи в файловую систему (в байтах).
- Top queries by average calls per second — топ запросов по среднему количеству вызовов в секунду.
- Shared blocks read — количество прочитанных разделяемых блоков памяти.
- Shared blocks written — количество записанных разделяемых блоков памяти.
- Query-local blocks read — количество прочитанных локальных блоков памяти запроса.
- Query-local blocks written — количество записанных локальных блоков памяти запроса.
- Temp blocks read — количество прочитанных временных блоков.
- Temp blocks written — количество записанных временных блоков.
- Top queries by generated WALs — топ запросов по объему сгенерированных WAL-записей (в байтах).
Таблица:
Per-query statistics for period (sorted by avg CPU consumption) — сводная таблица статистики по каждому запросу за выбранный период, отсортированная по среднему потреблению CPU. Содержит:
- Роль хоста (
host_role). - Пользователя и базу данных (
user,database). - Идентификатор и текст запроса (
queryid,query). - Общее количество вызовов (
total_calls). - Общее количество просканированных строк (
total_rows_scanned). - Общее время выполнения (
total_exec_time). - Среднее время выполнения (
average_exec_time). - Общее время CPU (
total_cpu_time). - Среднее время CPU (
average_cpu_time). - Общий объем операций с файловой системой (
total_fs_bytes). - Средний объем чтения из файловой системы (
average_fs_reads_bytes). - Средний объем записи в файловую систему (
average_fs_writes_bytes).
Анализ производительности
Выявление медленных запросов
Чтобы найти медленные запросы:
- На панели Per-Statement Statistics отсортируйте запросы по Average Execution Time или Total Execution Time.
- Обратите внимание на запросы с высоким временем выполнения.
- Проанализируйте план выполнения таких запросов с помощью
EXPLAIN ANALYZE.
Анализ использования ресурсов
Чтобы выявить запросы, потребляющие много ресурсов:
- Проверьте панель CPU Usage для запросов с высоким использованием процессора.
- Проверьте панель I/O Operations для запросов с интенсивными операциями ввода-вывода.
- Проверьте панель WAL Generated для запросов, генерирующих много WAL-записей.
Выявление блокировок
Чтобы найти блокирующие процессы:
- На панели Sessions Activity Statistics найдите сессии с непустым полем
blocking_pids. - Определите, какие запросы вызывают блокировки.
- Оптимизируйте логику работы с транзакциями или добавьте индексы.
Отключение диагностики
Чтобы отключить сбор статистики для конкретного кластера:
kubectl patch ManagedPostgresConfigs main --type='merge' -p='{"spec":{"settings": {"performance-diagnostics":{"enabled":false}}}}'
Важно
При отключении функции на уровне платформы будут удалены все собранные метрики из ClickHouse®.