pg_stat_statements
Расширение Postgres, которое собирает статистику по всем выполненным запросам: сколько раз вызывался, сколько занял времени, сколько прочёл буферов. ide99 рендерит его в виде таблицы топ-запросов с фильтрами и быстрым переходом в EXPLAIN.
Установка
Расширение поставляется с Postgres, но не активировано по умолчанию.
- Добавьте в
postgresql.conf:shared_preload_libraries = 'pg_stat_statements'
pg_stat_statements.track = all
pg_stat_statements.max = 10000
- Перезапустите Postgres.
- В нужной БД:
CREATE EXTENSION pg_stat_statements;
Расширение требует superuser для установки. На managed-Postgres (Supabase, Neon, RDS) — обычно уже включено.
После установки появятся новые view: pg_stat_statements. ide99 автоматически распознает и активирует таб.
Открыть
В шапке табов: + New tab → Top queries (название может варьироваться). Или из Health screen — кнопка View slow queries.
Что показывается
| Поле |
Что |
| Query |
Текст запроса (нормализованный — литералы заменены на $1, $2, ...) |
| Calls |
Количество вызовов |
| Total time |
Сумма времени всех вызовов (мс) |
| Mean time |
Среднее (мс) |
| Stddev |
Разброс (мс) |
| Rows |
Сумма возвращённых строк |
| Hit % |
Процент чтений из shared buffers |
| Time / row |
Mean time / Rows — оценка стоимости одной строки |
Сортировка
Сверху — переключатель Order by:
- Total time — кто съел больше всего времени БД (для оптимизации общей нагрузки)
- Mean time — самые медленные сами по себе (для пользовательского опыта)
- Calls — самые частые (даже быстрые в сумме могут давить)
- Rows — кто перелопачивает больше всего строк
Фильтры
- User — отфильтровать по имени Postgres-роли
- Database — если статистика собирается по нескольким БД
- Min calls — скрыть запросы с малым числом вызовов (фоновые однократные)
- Search — текстовый поиск по запросу (например,
users найдёт все запросы, где есть это слово)
Действия на запросе
Двойной клик / правый клик:
- Show full query — модалка с полным текстом
- EXPLAIN — открывает визуализатор с этим запросом (литералы остаются как
$1, ide99 не пытается их подставить)
- Copy — в буфер
- Reset stats — сбросить статистику только этого запроса
Reset
Кнопка Reset all stats в шапке — выполнит SELECT pg_stat_statements_reset(). Полезно перед нагрузочным тестом или после деплоя — чтобы видеть «свежую» картину.
Reset на prod без необходимости не делайте — потеряете историю, которой могли воспользоваться вы или коллеги.
Авто-обновление
Toggle Auto-refresh в шапке: off / 30s / 1m / 5m. Для регулярного мониторинга достаточно 1m — статистика накапливается, не нужно обновлять каждую секунду.
Совет: расследование «база медленная»
- Открыть Top queries, отсортировать по Total time.
- Топ-3–5 запросов = 80% нагрузки.
- Для каждого — EXPLAIN → найти горячий узел → создать индекс или переписать.
- После фикса —
Reset all stats, мониторить неделю.
Что дальше