Historia aktywnych sesji w PostgreSQL – nowe rozszerzenie pgsentinel

Firma pgsentinel wprowadziła rozszerzenie o tej samej nazwie pgsentinel (repozytorium github), które dodaje do PostgreSQL widok pg_active_session_history — historię aktywnych sesji (analogicznie do oraklowego v$active_session_history).

W zasadzie są to po prostu jednosekundowe migawki z pg_stat_activity, ale są ważne szczegóły:

  1. Wszystkie zgromadzone informacje są przechowywane tylko w pamięci operacyjnej, a zużywana ilość pamięci jest regulowana przez liczbę ostatnich przechowywanych rekordów.
  2. Dodawane jest pole queryid — ten sam queryid z rozszerzenia pg_stat_statements (wymagana jest wcześniejsza instalacja).
  3. Dodawane jest pole top_level_query — tekst zapytania, z którego wywołano bieżące zapytanie (w przypadku użycia pl/pgsql)


Pełna lista pól 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                     

Na razie nie ma gotowego pakietu do instalacji. Proponuje się pobranie źródeł i samodzielne skompilowanie biblioteki. Wcześniej należy zainstalować pakiet „devel” dla swojego serwera i dodać ścieżkę do pg_config do zmiennej PATH. Kompilujemy:

cd pgsentinel/src
make
make install

Dodajemy parametry do postgres.conf:

shared_preload_libraries = ‘pg_stat_statements,pgsentinel’
track_activity_query_size = 2048
pg_stat_statements.track = all

# количество удерживаемых в памяти последних записей
pgsentinel_ash.max_entries = 10000

Restartujemy PostgreSQL i tworzymy rozszerzenie:

create extension pgsentinel;

Zgromadzone informacje pozwalają odpowiedzieć na takie pytania jak:

  • Na jakich oczekiwaniach sesje spędzały najwięcej czasu?
  • Które sesje były najbardziej aktywne?
  • Jakie zapytania były najbardziej aktywne?

Odpowiedzi na te pytania można uzyskać, oczywiście, za pomocą zapytań SQL, ale wygodniej jest zobaczyć to wizualnie na wykresie, zaznaczając interesujące przedziały czasu myszką. Można to zrobić za pomocą darmowego programu PASH-Viewer (zebrane binaria można pobrać w sekcji Releases).

Przy starcie PASH-Viewer (z wersją 0.4.0) sprawdza, czy istnieje widok pg_active_session_history, a jeśli tak, ładuje z niego całą zgromadzoną historię i kontynuuje odczytywanie nowych danych, aktualizując wykres co 15 sekund.

Historia aktywnych sesji w PostgreSQL – nowe rozszerzenie pgsentinel

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster