Comme quelqu'un l'a dit dans les commentaires, pg_stat_statements est le moyen d'obtenir les statistiques. Mettez ceci dans votre postgresql.conf
:
shared_preload_libraries = 'pg_stat_statements'
pg_stat_statements.max = 10000
pg_stat_statements.track = all
Exécutez ensuite cette requête:
CREATE EXTENSION pg_stat_statements;
Après cela, cet exemple de requête (copié à partir des documents liés ci-dessus) vous donnera les statistiques des 5 principales requêtes de toutes les bases de données :
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;
Si vous voulez des résultats pour une seule base de données , vous devez filtrer par dbid
lequel vous pouvez obtenir pg_database
par nom de base de données. Ajoutez cette clause WHERE à la requête ci-dessus:
WHERE dbid = (select oid from pg_database where datname = 'YOUR_DB_NAME')
Vous pouvez également faire une jointure.
Lorsque vous testez cela, il peut être judicieux d'exclure les requêtes dans les tables de statistiques / schémas elles-mêmes, par exemple:
AND query not similar to '%( pg_|information_schema)%'
Il existe un tas d'outils gratuits et commerciaux qui peuvent vous aider à visualiser les données.