Компания pgsentinel выпустила одноимённое расширение pgsentinel (репозиторий github), добавляющее в PostgreSQL представление pg_active_session_history — историю активных сессий (по аналогии с оракловой v$active_session_history).
По сути, это просто-напросто ежесекундные снимки из pg_stat_activity, но есть важные моменты:
- Вся накопленная информация хранится только в оперативной памяти, а потребляемый объём памяти регулируется количеством последних хранимых записей.
- Добавляется поле queryid — тот самый queryid из расширения pg_stat_statements (требуется предварительная установка).
- Добавляется поле top_level_query — текст запроса, из которого был вызван текущий запрос (в случае использования pl/pgsql)
Column | Type ------------------+-------------------------- ash_time | timestamp with time zone datid | oid datname | text pid | integer usesysid | oid usename | text application_name | text client_addr | text client_hostname | text client_port | integer backend_start | timestamp with time zone xact_start | timestamp with time zone query_start | timestamp with time zone state_change | timestamp with time zone wait_event_type | text wait_event | text state | text backend_xid | xid backend_xmin | xid top_level_query | text query | text queryid | bigint backend_type | text
Для установки добавьте параметры в postgres.conf:
shared_preload_libraries = 'pg_stat_statements,pgsentinel'
track_activity_query_size = 2048
pg_stat_statements.track = all# количество удерживаемых в памяти последних записей
pgsentinel_ash.max_entries = 10000
Затем перезагрузите PostgreSQL и создайте расширение:
create extension pgsentinel;
Накопленная информация позволяет ответить на такие вопросы, как:
- На каких ожиданиях сессии провели больше всего времени?
- Какие сессии были наиболее активны?
- Какие запросы были наиболее активны?
Получить ответы на эти вопросы можно, конечно, SQL-запросами, но удобнее увидеть это наглядно на графике, выделяя мышкой интересуемые интервалы времени. Вы можете сделать это с помощью бесплатной программы PASH-Viewer (скачать собранные бинари можно в разделе Releases).
При старте PASH-Viewer (начиная с версии 0.4.0) проверяет наличие представления pg_active_session_history и если оно есть, то загружает из него всю накопленную историю и продолжает считывать новые поступающие данные, обновляя график раз в 15 секунд.
Автор: Дмитрий Цветков