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

Компанията pgsentinel пусна едноименното разширение pgsentinel (репозиторий github), добавящо в PostgreSQL представление pg_active_session_history — история на активните сесии (по аналогия с Oracle 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
, затова потребителите на Windows трябва да инсталират Cygwin или да се справят сами с Visual Studio и библиотеките.
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 (можете да изтеглите събраните бинарни файлове в раздела Издания).

При стартиране на PASH-Viewer (от версия 0.4.0 нататък) проверява наличието на представление pg_active_session_history и ако то съществува, зарежда всичката натрупана история от него и продължава да чете новите постъпващи данни, обновявайки графика на всеки 15 секунди.

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

Източник: habr.com

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster