0Pricing
SQL Academy · Урок

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 — локальная установка не требуется.

Все уроки этого курса

  1. pg_stat_statements: самые ресурсоёмкие запросы
  2. pgBadger для анализа журналов
  3. Пулинг соединений: PgBouncer
  4. Планирование ёмкости и аудит раздувания
← Назад к SQL Academy