So überprüfen / kennen Sie die am häufigsten ausgeführten Abfragen

9

Ich möchte Statistiken zu den am häufigsten ausgeführten Abfragen in meiner Datenbank sammeln.

Dazu muss ich wissen, wie ich Abfragen verfolgen kann, damit ich Ansichten oder materialisierte Ansichten erstellen kann, um die Ergebnisse der am häufigsten ausgeführten Abfragen zwischenzuspeichern, da ich eine große Datenbank habe.

Mamesaye
quelle
1
Hast du hier nachgesehen ?
Nelz
Wie groß ist aus Neugier groß? Mit "höchster Lauf" meinen Sie auch den am häufigsten ausgeführten oder den kumulativ teuersten Abfragen? Und mit einer einfachen Ansicht sparen Sie diesbezüglich nichts.
Dekso
@ dezso: Es sind 300k Zeilen in der Haupttabelle. Das teuerste wäre eine Priorität, aber ich möchte auch wissen, was am häufigsten läuft.
Mamesaye
Wie @a_horse_with_no_name bereits sagte .. ist die Erweiterung pg_stat_statements wahrscheinlich das, was Sie brauchen.
Joishi Bodio

Antworten:

8

Wie jemand in den Kommentaren sagte, ist pg_stat_statements der Weg, um die Statistiken zu erhalten. Setzen Sie dies in Ihre postgresql.conf:

shared_preload_libraries = 'pg_stat_statements'

pg_stat_statements.max = 10000
pg_stat_statements.track = all

Führen Sie dann diese Abfrage aus:

CREATE EXTENSION pg_stat_statements; 

Danach erhalten Sie mit dieser Beispielabfrage (kopiert aus den oben verlinkten Dokumenten) die Statistiken für 5 Top-Abfragen aus allen Datenbanken :

SELECT query, calls, total_time, rows,
100.0 * shared_blks_hit / nullif(shared_blks_hit + shared_blks_read, 0) AS hit_percent
FROM pg_stat_statements ORDER BY total_time DESC LIMIT 5;

Wenn Sie Ergebnisse für eine einzelne Datenbank wünschen , müssen Sie nach dbiddem pg_databaseNamen der Datenbank filtern . Fügen Sie diese WHERE-Klausel zur obigen Abfrage hinzu:

WHERE dbid = (select oid from pg_database where datname = 'YOUR_DB_NAME')

Sie können auch einen Join durchführen.

Wenn Sie dies testen, ist es möglicherweise eine gute Idee, die Abfragen in den Statistik- / Schematabellen selbst auszuschließen, zum Beispiel:

AND query not similar to '%( pg_|information_schema)%'

Es gibt eine Reihe kostenloser und kommerzieller Tools , mit denen Sie die Daten visualisieren können.

Matt
quelle