Abrufen von Statistiken zu langsam laufenden Abfragen

10

Meine Datenbankanwendung führt viele verschiedene Abfragen aus. Ich habe log_min_duration_statementauf 1000 gesetzt . Aber dort protokollierte Abfragen sind nicht immer langsam, meistens dauern sie nur ein paar ms.

Ist es möglich, eine Statistik aller Abfragen zu erhalten und wie oft haben sie länger als 1000 ms gedauert?

user2047809
quelle
1
Überprüfen Sie, ob dies hilfreich ist : Die Einstellung log_min_duration_statement wird ignoriert . Oder Sie haben vergessen, die Konfiguration nach dem Ändern der Einstellung neu zu laden.
Daniel Vérité

Antworten:

11

Installieren Sie die Erweiterung pg_stat_statements mit dem SQL-Befehl

CREATE EXTENSION pg_stat_statements

Möglicherweise möchten Sie sicherstellen, dass Sie dies mithilfe eines geeigneten Benutzers erstellen (z. B. des Benutzers, den Ihre Anwendung verwendet, oder eines DBA-Kontos). Beachten Sie, dass jeder Benutzer, der die Erweiterung erstellt, diese auch besitzt.

Dies erfordert einen Neustart des Servers, damit er verwendet werden kann (da Sie die Konfiguration in postgresql.conf geringfügig ändern müssen, was sich auf den Speicherverbrauch auswirkt), aber Sie erhalten Statistiken zu allen Abfragen.

Weitere Informationen zu den Funktionen von pg_stat_statements finden Sie auf der Dokumentationsseite . Siehe hier für eine schnelle Referenz auf Konfiguration der postgresql.conf Konfigurationsdatei für pg_stat_statements.

Sobald Sie es installiert und ausgeführt haben, können Sie Statistiken anzeigen, indem Sie die Ansicht pg_stat_statements abfragen.

select * from pg_stat_statements;
-- or
select * from pg_stat_statements where total_time / calls > 200; -- etc ..
Joishi Bodio
quelle
2

Wie @JoishiBodio sagte, können Sie die pg_stat_statementsErweiterung verwenden, um Statistiken für langsame Abfragen anzuzeigen . Für diejenigen, die mit der Installation zu kämpfen haben (wie ich):

  1. Überprüfen Sie, ob pg_stat_statementsin der Liste der verfügbaren Erweiterungen enthalten ist:

    SELECT * FROM pg_available_extensions;
  2. Versuchen Sie, das postgresql-contribPaket über Ihren Systempaket-Manager unter Debian / Ubuntu zu installieren :

    sudo apt-get install postgresql-contrib-9.5

Führen Sie dann Schritt 1 erneut aus.

  1. In pg_stat_statementszu shared_preload_librariesin PostgreSQL - Konfiguration:

via postgres.conf:

    shared_preload_libraries = 'pg_stat_statements'

über Befehlszeilenargumente (keine Anführungszeichen!):

    postgres -c shared_preload_libraries=pg_stat_statements
  1. Erstellen Sie dann die Erweiterung in einer Datenbank:

    CREATE EXTENSION pg_stat_statements;
Andrey Semakin
quelle