pg_stat_statements : requêtes principales
Activez pg_stat_statements, trouvez les requêtes les plus lourdes par temps total et ciblez-les pour les optimiser.
pg_stat_statements : requêtes principales est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Academy comprend 4 leçons au total.
Ce que vous apporte pg_stat_statements
Un historique cumulatif de chaque requête, normalisé selon sa structure : le seul outil DBA le plus utile dans PostgreSQL.
L’activer
Il s’agit d’une extension contrib. Ajoutez-la à shared_preload_libraries, puis redémarrez :
-- postgresql.conf
shared_preload_libraries = 'pg_stat_statements'
-- After restart:
CREATE EXTENSION pg_stat_statements;Requêtes les plus coûteuses en temps total
La requête « où passe mon CPU » :
SELECT calls,
total_exec_time,
mean_exec_time,
rows,
query
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 10;Requêtes lentes à chaque appel
Les requêtes qui sont lentes à chaque appel :
SELECT mean_exec_time, calls, query
FROM pg_stat_statements
WHERE mean_exec_time > 100
ORDER BY mean_exec_time DESC
LIMIT 20;Requêtes fréquentes et peu coûteuses
Un million de requêtes d’une milliseconde reste un problème :
SELECT calls, mean_exec_time, total_exec_time, query
FROM pg_stat_statements
ORDER BY calls DESC
LIMIT 20;Normalisation
pg_stat_statements regroupe les requêtes selon leur structure normalisée : les littéraux sont remplacés par $N. Ainsi, « SELECT * FROM users WHERE id = 1 » et « = 2 » deviennent la même ligne.
Réinitialiser les statistiques
Repartez de zéro après un déploiement afin de mesurer le nouveau comportement :
SELECT pg_stat_statements_reset();Temps d’E/S ou temps processeur
Les versions récentes de PG séparent le temps d’exécution. shared_blks_hit / shared_blks_read donnent une indication sur l’utilisation du cache ou du disque :
SELECT query, shared_blks_hit, shared_blks_read,
shared_blks_read::FLOAT / NULLIF(shared_blks_hit + shared_blks_read, 0) AS read_ratio
FROM pg_stat_statements
ORDER BY shared_blks_read DESC LIMIT 20;Temps de compilation JIT et de planification
PG 13 et versions ultérieures exposent total_plan_time. Certaines requêtes passent plus de temps en PLANNING qu’à s’exécuter : c’est généralement le signe qu’il faut utiliser des instructions préparées.
Statistiques par base de données ou par utilisateur
pg_stat_statements couvre l’ensemble du cluster. Filtrez selon les colonnes dbid et userid pour obtenir des vues par base de données ou par utilisateur.
Combiner avec EXPLAIN ANALYZE
pg_stat_statements vous indique QUELLES requêtes sont lentes. EXPLAIN ANALYZE vous indique POURQUOI.
Points à retenir
- L’accumulation par base de données et par utilisateur peut masquer des problèmes : examinez le total
- Le temps par ligne n’est pas suivi, seul le total par appel l’est
- Les statistiques sont réinitialisées au redémarrage ou lors d’un appel de réinitialisation
Récapitulatif
pg_stat_statements est obligatoire en production.
- Classement par temps total → gains les plus importants
- Classement par moyenne → lenteur constante
- Classement par nombre d’appels → problème de fréquence
- Associez-le à EXPLAIN pour corriger les problèmes
Vérification rapide
Vous avez activé pg_stat_statements. Quelle requête fournit les gains de performance potentiels les plus importants à examiner ?
Questions Fréquemment Posées
La leçon « pg_stat_statements : requêtes principales » est-elle gratuite ?
Oui — le texte complet de « pg_stat_statements : requêtes principales » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Academy, passe à CoddyKit PRO. Le cours SQL Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « pg_stat_statements : requêtes principales » ?
Activez pg_stat_statements, trouvez les requêtes les plus lourdes par temps total et ciblez-les pour les optimiser. Tu pratiques SQL Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer SQL Academy ?
Aucune expérience préalable n'est requise. SQL Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « pg_stat_statements : requêtes principales » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon SQL Academy ?
Oui. Chaque leçon SQL Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- pg_stat_statements : requêtes principales
- pgBadger pour analyser les journaux
- Mise en commun des connexions : PgBouncer
- Planification de capacité et audits du gonflement