Come qualcuno ha detto nei commenti, pg_stat_statements è il modo per ottenere le statistiche. Metti questo nel tuo postgresql.conf
:
shared_preload_libraries = 'pg_stat_statements'
pg_stat_statements.max = 10000
pg_stat_statements.track = all
Quindi eseguire questa query:
CREATE EXTENSION pg_stat_statements;
Dopodiché, questa query di esempio (copiata dai documenti collegati sopra) ti fornirà le statistiche per 5 query principali da tutti i database :
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;
Se si desidera risultati per un singolo database , è necessario filtrare in base al dbid
quale è possibile ottenere in pg_database
base al nome db. Aggiungi questa clausola WHERE alla query sopra:
WHERE dbid = (select oid from pg_database where datname = 'YOUR_DB_NAME')
Potresti anche fare un join.
Durante il test, può essere una buona idea escludere le query dalle stesse tabelle statistiche / schema, ad esempio:
AND query not similar to '%( pg_|information_schema)%'
Esistono numerosi strumenti gratuiti e commerciali che possono aiutarti a visualizzare i dati.