Π˜ΡΡ‚ΠΎΡ€ΠΈΡ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… сСссий Π² 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 сСкунд.

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… сСссий Π² PostgreSQL — Π½ΠΎΠ²ΠΎΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ pgsentinel

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ