pg_stat_statements: самые ресурсоёмкие запросы
Включайте pg_stat_statements, находите самые ресурсоёмкие запросы по суммарному времени и направляйте на них оптимизацию
«pg_stat_statements: самые ресурсоёмкие запросы» — бесплатный урок SQL Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Academy содержит 4 уроков всего.
Что даёт pg_stat_statements
Накопительную историю каждого запроса, нормализованную по форме, — самый полезный инструмент DBA в PostgreSQL.
Включение расширения
Это расширение из набора contrib. Добавьте его в shared_preload_libraries и перезапустите сервер:
-- postgresql.conf
shared_preload_libraries = 'pg_stat_statements'
-- After restart:
CREATE EXTENSION pg_stat_statements;Запросы с наибольшим общим временем
Запрос «на что расходуется мой CPU»:
SELECT calls,
total_exec_time,
mean_exec_time,
rows,
query
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 10;Медленные запросы при каждом вызове
Запросы, которые медленно выполняются при каждом вызове:
SELECT mean_exec_time, calls, query
FROM pg_stat_statements
WHERE mean_exec_time > 100
ORDER BY mean_exec_time DESC
LIMIT 20;Частые дешёвые запросы
Даже миллион запросов по 1 мс — это проблема:
SELECT calls, mean_exec_time, total_exec_time, query
FROM pg_stat_statements
ORDER BY calls DESC
LIMIT 20;Нормализация
pg_stat_statements группирует запросы по нормализованной форме: литералы заменяются на $N. Поэтому «SELECT * FROM users WHERE id = 1» и «= 2» становятся одной строкой.
Сброс статистики
Начните сбор статистики заново после развёртывания, чтобы измерить новое поведение:
SELECT pg_stat_statements_reset();Время ввода-вывода и CPU
В новых версиях PG время выполнения разделяется на составляющие. shared_blks_hit / shared_blks_read помогают отличить обращения к кэшу от чтения с диска:
SELECT query, shared_blks_hit, shared_blks_read,
shared_blks_read::FLOAT / NULLIF(shared_blks_hit + shared_blks_read, 0) AS read_ratio
FROM pg_stat_statements
ORDER BY shared_blks_read DESC LIMIT 20;JIT и время планирования
PG 13+ предоставляет total_plan_time. Некоторые запросы тратят на PLANNING больше времени, чем на выполнение, — обычно это признак того, что следует использовать подготовленные операторы.
Статистика по базе данных и пользователю
pg_stat_statements действует на уровне всего кластера. Фильтруйте данные по столбцам dbid и userid, чтобы получить представления для отдельной базы данных или пользователя.
Комбинация с EXPLAIN ANALYZE
pg_stat_statements показывает, WHICH запросы медленные. EXPLAIN ANALYZE показывает, WHY.
Ограничения
- Накопление данных по отдельной базе и пользователю может скрывать проблемы — анализируйте общий показатель
- Время для отдельных строк не отслеживается, учитывается только общее время вызова
- Статистика сбрасывается при перезапуске или вызове сброса
Итоги
pg_stat_statements обязателен в рабочей среде.
- Сортировка по общему времени → наибольший потенциал улучшения
- Сортировка по среднему времени → стабильная медленная работа
- Сортировка по числу вызовов → проблема частоты
- Используйте вместе с EXPLAIN для поиска исправлений
Быстрая проверка
Вы включили pg_stat_statements. Какой запрос следует исследовать, чтобы получить наибольшее ускорение?
Часто задаваемые вопросы
Урок «pg_stat_statements: самые ресурсоёмкие запросы» бесплатный?
Да — полный текст урока «pg_stat_statements: самые ресурсоёмкие запросы» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.
Чему я научусь в уроке «pg_stat_statements: самые ресурсоёмкие запросы»?
Включайте pg_stat_statements, находите самые ресурсоёмкие запросы по суммарному времени и направляйте на них оптимизацию Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать SQL Academy?
Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «pg_stat_statements: самые ресурсоёмкие запросы»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке SQL Academy?
Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- pg_stat_statements: самые ресурсоёмкие запросы
- pgBadger для анализа журналов
- Пулинг соединений: PgBouncer
- Планирование ёмкости и аудит раздувания