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

    Компания 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                     
    


    Готового пакета для установки пока нет. Предлагается скачать исходники и собрать библиотеку самостоятельно. Предварительно требуется установить «devel»-пакет для своего сервера и в переменную PATH прописать путь до pg_config. Собираем:
    cd pgsentinel/src
    make
    make install

    Добавляем параметры в 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 секунд.

    image
    Поделиться публикацией

    Комментарии 0

    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

    Самое читаемое