Statistics collector (Stats collector)

Statistics collector - отвечает за сбор и агрегацию статистики о работе кластера: активности сессий, использовании таблиц и индексов, количестве чтений/записей и т.д.

Эта статистика доступна через системные представления (pg_stat_*) и используется как администраторами, так и планировщиком запросов (в части pg_statistic, хотя последняя обновляется через ANALYZE).

Как это работает (внутренне)

  1. Каждый backend-процесс (и фоновые процессы) локально накапливает статистику:
    • Сколько строк прочитано/вставлено/обновлено,
    • Какие таблицы использовались,
    • Длительность запросов (если включено track_activities).
  2. Stats collector — отдельный фоновый процесс, запускаемый postmaster при старте, — периодически (каждые PGSTAT_STAT_INTERVAL, ~500 мс) собирает эти данные от всех процессов через Unix-сокеты или shared memory (в зависимости от версии).
  3. Статистика агрегируется и хранится:
    • В временных файлах (в PG ≤ 13): pg_stat_tmp/,
    • В shared memory (в PG ≥ 14): для улучшения производительности и отказоустойчивости.
  4. При запросе вида 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_activitiesonСобирать ли данные о текущих запросах
track_countsonСобирать ли статистику по таблицам/индексам
track_io_timingoffСобирать ли время I/O (требует overhead)
track_functionsnoneСобирать ли статистику по функциям
stats_temp_directorypg_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_*