История активных сессий в PostgreSQL — новое расширение pgsentinel

в 10:55, , рубрики: active session history, pash-viewer, pg_active_session_history, pgsentinel, postgresql, wait events monitoring, Администрирование баз данных

Компания pgsentinel выпустила одноимённое расширение pgsentinel (репозиторий github), добавляющее в PostgreSQL представление pg_active_session_history — историю активных сессий (по аналогии с оракловой v$active_session_history).

По сути, это просто-напросто ежесекундные снимки из pg_stat_activity, но есть важные моменты:

  1. Вся накопленная информация хранится только в оперативной памяти, а потребляемый объём памяти регулируется количеством последних хранимых записей.
  2. Добавляется поле queryid — тот самый queryid из расширения pg_stat_statements (требуется предварительная установка).
  3. Добавляется поле top_level_query — текст запроса, из которого был вызван текущий запрос (в случае использования pl/pgsql)

Полный список полей pg_active_session_history:

      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 секунд.

Автор: Дмитрий Цветков

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js