Health screen
Health-экран — однократный осмотр базы. Десять индикаторов на одном экране показывают, где можно сэкономить место, ускорить запросы, выявить устаревшую статистику. Вместо «зоопарка» из pgAdmin → Statistics → Slow queries → Bloat → ... всё в одном месте.
Открыть
- ⌘+Shift+H
- Иконка ❤ в шапке табов
Health-таб привязан к текущему подключению.
Что показывается
1. Размер базы и таблиц
Общий размер БД и топ-10 таблиц по размеру. Кнопка Open in editor на любой строке откроет таблицу в Schema-браузере.
2. Bloat
Таблицы и индексы с раздутыми пустыми страницами (typical после массового UPDATE или DELETE). Считается через стандартный запрос к pg_stat_user_tables + pg_stats.
Колонки:
bloat_pct — процент пустого пространства в данных таблицы
wasted_mb — мегабайт, которые можно вернуть
Кнопка REINDEX или VACUUM FULL появляется на строке, если bloat > 30%. Перед запуском ide99 покажет SQL и предупредит про блокировку:
VACUUM FULL берёт AccessExclusiveLock. Для prod используйте pg_repack.
3. Неиспользуемые индексы
Индексы с idx_scan = 0 (ни одного использования с момента сброса статистики). Подсказка: pg_stat_reset() запускался давно, поэтому 0 действительно означает «не используется».
Колонки:
index_name
table_name
size_mb
last_used (если расширение pg_stat_user_indexes собрано)
Кнопка DROP INDEX покажет SQL и потребует подтверждение через имя индекса.
4. Медленные запросы
Если установлено расширение pg_stat_statements — топ-10 запросов по total_exec_time. Колонки: запрос, calls, mean_time, total_time. Клик — открывает таб с pg_stat_statements (см. ту страницу подробнее).
Если расширение не установлено — Health покажет инструкцию, как включить:
CREATE EXTENSION pg_stat_statements;
-- + добавить в shared_preload_libraries и перезапустить
5. Cache hit ratio
Сколько чтений ушли в shared buffers, сколько — на диск. Здоровая prod-база: > 99% buffer hits. Если меньше 95% — мало shared_buffers или активная база больше памяти.
6. Активные подключения
Сколько коннектов открыто, какой % от max_connections. При > 80% — предупреждение. Кнопка Open Live Ops перебрасывает на лайв-панель сессий.
7. Vacuum / Autovacuum
Дата последнего успешного VACUUM и AUTOVACUUM для топ-таблиц. Если давно не было — bloat растёт. Кнопка VACUUM запустит вручную (с предупреждением о блокировках).
8. Replication lag
Если есть реплики (pg_stat_replication) — задержка каждой в байтах и секундах. Подсветка красным, если lag > порога (по умолчанию 10 секунд). Можно настроить в Настройки → Health → Replication threshold.
9. Слабые места по статистике
Таблицы, у которых last_analyze > 7 дней или n_dead_tup / n_live_tup > 20%. Это означает, что планировщик работает с устаревшими данными и может выбирать плохие планы. Кнопка ANALYZE запустит обновление статистики.
10. Foreign keys без индекса
Колонки, на которые ссылается foreign key, но индекса нет. Это делает JOIN и DELETE CASCADE медленными. Кнопка CREATE INDEX покажет CREATE INDEX CONCURRENTLY (безопасный для prod).
Подтверждение perform-changes на prod
Любая кнопка действия (REINDEX, VACUUM, DROP, CREATE INDEX) на prod-подключении требует ввести имя таблицы или индекса:
Подтвердить REINDEX «orders»
Введите имя таблицы:
[ ]
После запуска появляется live-progress (читается pg_stat_progress_*) — видно, сколько процентов уже сделано.
Регулярность
Health не запускается в фоне. Это скрин «здесь и сейчас». Хорошая привычка — открывать раз в неделю на dev и stage, реже на prod (длительные запросы могут нагрузить базу).
Все Health-запросы read-only. Они не меняют данные, только читают системные таблицы. На prod-базе их можно запускать без опасения.
Что дальше
- Live Ops — то, что происходит прямо сейчас (locks, replication).
- pg_stat_statements — детальный анализ медленных запросов.
- pg_repack — безопасное удаление bloat без блокировки.