Die Geschichte aktiver Sessions in PostgreSQL – eine neue Erweiterung pgsentinel

Unternehmen pgsentinel hat das gleichnamige Erweiterungspacket pgsentinel (GitHub-Repository), das in PostgreSQL die Ansicht pg_active_session_history hinzufügt — eine Historie aktiver Sitzungen (analog zur Oracle v$active_session_history).

Im Grunde genommen sind dies einfach Sekundenmomentaufnahmen aus pg_stat_activity, aber es gibt wichtige Punkte:

  1. Alle gesammelten Informationen werden nur im Arbeitsspeicher gespeichert, und der verbrauchte Speicher wird durch die Anzahl der zuletzt gespeicherten Einträge reguliert.
  2. Es wird ein Feld queryid hinzugefügt — das ist genau das queryid aus der Erweiterung pg_stat_statements (eine vorherige Installation ist erforderlich).
  3. Ein Feld top_level_query wird hinzugefügt — der Text der Abfrage, von der die aktuelle Abfrage aufgerufen wurde (im Fall der Verwendung von pl/pgsql).


Vollständige Liste der Felder 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                     

Ein fertiges Installationspaket gibt es bisher nicht. Es wird empfohlen, die Quellcodes herunterzuladen und die Bibliothek selbst zu kompilieren. Zuvor muss das „devel“-Paket für Ihren Server installiert werden, und der Pfad zu pg_config muss in die PATH-Variable aufgenommen werden. Kompilieren:

cd pgsentinel/src
make
make install

Fügen Sie die Parameter in postgres.conf hinzu:

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

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

Starten Sie PostgreSQL neu und erstellen Sie die Erweiterung:

create extension pgsentinel;

Die gesammelten Informationen ermöglichen Antworten auf Fragen wie:

  • Worauf haben die Sitzungen am längsten gewartet?
  • Welche Sitzungen waren die aktivsten?
  • Welche Abfragen waren die aktivsten?

Die Antworten auf diese Fragen können natürlich mit SQL-Abfragen erhalten werden, aber es ist praktischer, dies visuell in einem Diagramm zu sehen und interessante Zeitintervalle mit der Maus auszuwählen. Sie können dies mit der kostenlosen Software PASH-Viewer (die gesammelten Binaries können im Abschnitt Releases).

Beim Start von PASH-Viewer (ab Version 0.4.0) wird überprüft, ob die Ansicht pg_active_session_history vorhanden ist. Falls ja, lädt er die gesamte gesammelte Historie und setzt das Einlesen neuer eintreffender Daten fort, wobei das Diagramm alle 15 Sekunden aktualisiert wird.

Die Geschichte aktiver Sessions in PostgreSQL – eine neue Erweiterung pgsentinel

Quelle: habr.com

60GB SSD 8Gb DDR4