Statistics collector (Stats collector)
Statistics collector - отвечает за сбор и агрегацию статистики о работе кластера: активности сессий, использовании таблиц и индексов, количестве чтений/записей и т.д.
Эта статистика доступна через системные представления (
pg_stat_*) и используется как администраторами, так и планировщиком запросов (в частиpg_statistic, хотя последняя обновляется черезANALYZE).
Как это работает (внутренне)
- Каждый backend-процесс (и фоновые процессы) локально накапливает статистику:
- Сколько строк прочитано/вставлено/обновлено,
- Какие таблицы использовались,
- Длительность запросов (если включено
track_activities).
- Stats collector — отдельный фоновый процесс, запускаемый
postmasterпри старте, — периодически (каждыеPGSTAT_STAT_INTERVAL, ~500 мс) собирает эти данные от всех процессов через Unix-сокеты или shared memory (в зависимости от версии). - Статистика агрегируется и хранится:
- В временных файлах (в PG ≤ 13):
pg_stat_tmp/, - В shared memory (в PG ≥ 14): для улучшения производительности и отказоустойчивости.
- В временных файлах (в PG ≤ 13):
- При запросе вида
SELECT * FROM pg_stat_user_tablesданные считываются из этого централизованного хранилища.
Какую статистику он собирает?
| Категория | Примеры данных |
|---|---|
| Активность сессий | pg_stat_statements, pg_stat_activity (текущие запросы, ожидания) |
| Использование таблиц | pg_stat_user_tables: число seq scans, idx scans, n_tup_ins/upd/del |
| Использование индексов | pg_stat_user_indexes: сколько раз индекс использовался |
| I/O по таблицам | pg_statio_user_tables: буферные и дисковые чтения |
| Состояние репликации | pg_stat_replication, pg_stat_wal_receiver |
⚠️ Статистика по содержимому данных (
pg_statistic) НЕ собирается Stats collector’ом — она обновляется только черезANALYZE(вручную или autovacuum).
Ключевые параметры
| Параметр | По умолчанию | Роль |
|---|---|---|
track_activities | on | Собирать ли данные о текущих запросах |
track_counts | on | Собирать ли статистику по таблицам/индексам |
track_io_timing | off | Собирать ли время I/O (требует overhead) |
track_functions | none | Собирать ли статистику по функциям |
stats_temp_directory | pg_stat_tmp | Каталог для временных файлов статистики |
Важные нюансы
- Stats collector не влияет на MVCC, WAL или целостность данных — он чисто диагностический.
- При отключении
track_countsпредставления вродеpg_stat_user_tablesбудут возвращать нули. - В PG ≥14 статистика частично перенесена в shared memory, что ускорило доступ и устранило зависимость от файловой системы.
- Не является источником статистики для планировщика — для этого служит
pg_statistic, обновляемыйANALYZE.
Взаимодействие с другими компонентами
| Компонент | Взаимодействие |
|---|---|
| ProcArray | Читает список активных процессов, чтобы знать, от кого собирать статистику |
| shared_buffers | Не читает данные таблиц — только метаданные использования (в PG ≥14 часть статистики хранится в shared memory) |
| Backend процессы | Получает от них локально накопленную статистику через IPC (сокеты или shared memory) |
| Autovacuum worker | Использует статистику (например, n_dead_tup) для принятия решений, но Stats collector сам не запускает autovacuum |
Файловая система (pg_stat_tmp/) | В PG ≤13: пишет и читает временные файлы статистики (например, pgstat.stat) |
| pg_stat view_* | Является источником данных для всех представлений pg_stat_* |