0Pricing
SQL Academy · Leçon

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

  1. pg_stat_statements : requêtes principales
  2. pgBadger pour analyser les journaux
  3. Mise en commun des connexions : PgBouncer
  4. Planification de capacité et audits du gonflement
← Retour à SQL Academy