#pg-stat-views
С каких системных представлений начинаешь диагностику живой базы?
Что отвечать
Первый - `pg_stat_activity`: кто сейчас подключён, что выполняет, как долго, в каком состоянии (active, idle, idle in transaction), чего ждёт (`wait_event`). По нему сразу видно зависшие транзакции и блокировки. `pg_stat_statements` (расширение) - агрегат по нормализованным запросам: суммарное время, число вызовов, среднее, чтения буферов; главный инструмент «какие запросы съедают сервер». `pg_locks` показывает кто кого блокирует. `pg_stat_user_tables` и `pg_stat_user_indexes` - сканы, мёртвые версии, последний autovacuum, использование индексов. `pg_stat_io` (PG 16) даёт картину чтений и записей по типам. Это набор, с которого начинается любой разбор инцидента.
Что хотят услышать
Senior должен: - назвать `pg_stat_activity` как стартовую точку и что в нём смотреть (state, wait_event, длительность) - знать `pg_stat_statements` как способ найти тяжёлые запросы по агрегатам - перечислить `pg_locks`, `pg_stat_user_tables/indexes`, `pg_stat_io` и что каждое отвечает - подходить от симптома к представлению: медленно вообще - statements, висит конкретный - activity плюс locks
Подводные камни
- ✗ Начинать диагностику с гадания по логам вместо `pg_stat_activity` и `pg_stat_statements`
- ✗ Не включить `pg_stat_statements` заранее и остаться без истории на момент инцидента
- ✗ Смотреть только среднее время запроса и пропустить редкий, но катастрофически дорогой
Follow-up
- ? Как по `pg_stat_activity` найти транзакцию, висящую в idle in transaction?
- ? Что даёт `pg_stat_statements`, чего не видно в логе медленных запросов?
- ? Куда смотреть, чтобы понять, используется ли индекс?
Глубина в базе знаний