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 dbid
dem pg_database
Namen 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.