Comment vérifier / connaître les requêtes d'exécution les plus élevées

9

Je voudrais rassembler des statistiques sur les requêtes d'exécution les plus élevées dans ma base de données.

Pour cela, j'ai besoin de savoir comment je peux suivre les requêtes afin de pouvoir créer des vues ou des vues matérialisées pour mettre en cache les résultats des requêtes les plus élevées car j'ai une grande base de données.

mamesaye
la source
1
Avez-vous vérifié ici ?
Nelz
Par curiosité, quelle taille est grande? En outre, par «exécution la plus élevée», voulez-vous dire l'exécution la plus fréquente ou les requêtes cumulativement les plus coûteuses? Et, avec une vue simple, vous n'épargnez rien à cet égard.
dezso
@ dezso: c'est 300k lignes sur la table principale. Le plus cher serait une priorité mais je veux aussi savoir le plus couru.
mamesaye
Comme l'a déjà dit @a_horse_with_no_name .. l'extension pg_stat_statements est probablement ce dont vous avez besoin.
Joishi Bodio

Réponses:

8

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 dbidlequel vous pouvez obtenir pg_databasepar 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.

Mat
la source