ITSkillsCenter
Développement Web

PostgreSQL pg_stat_statements monitoring : tutoriel 2026

2 min de lecture

L’extension pg_stat_statements est la première à activer en production : elle agrège les statistiques de chaque requête SQL exécutée, permettant d’identifier les bottlenecks.

Voir notre guide extensions PG.

Activer

# postgresql.conf
shared_preload_libraries = 'pg_stat_statements'
pg_stat_statements.track = all

# Restart Postgres puis :
CREATE EXTENSION pg_stat_statements;

Top requêtes les plus coûteuses

SELECT
  substring(query, 1, 60) AS query,
  calls,
  ROUND(total_exec_time::numeric / 1000, 1) AS total_sec,
  ROUND(mean_exec_time::numeric, 2) AS mean_ms,
  ROUND((100 * total_exec_time / SUM(total_exec_time::numeric) OVER ())::numeric, 1) AS pct
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 20;

Requêtes les plus lentes en moyenne

SELECT
  substring(query, 1, 80) AS query,
  calls,
  ROUND(mean_exec_time::numeric, 2) AS mean_ms,
  ROUND(stddev_exec_time::numeric, 2) AS stddev_ms
FROM pg_stat_statements
WHERE calls > 100
ORDER BY mean_exec_time DESC
LIMIT 10;

Reset stats périodique

-- Reset hebdomadaire pour focus sur le récent
SELECT pg_stat_statements_reset();

EXPLAIN les requêtes lentes

EXPLAIN (ANALYZE, BUFFERS, FORMAT JSON)
SELECT * FROM orders WHERE customer_id = 42 AND status = 'paid'
ORDER BY created_at DESC LIMIT 20;

-- Lire le plan, identifier Seq Scan, Hash Join coûteux
-- Ajouter index si nécessaire
CREATE INDEX orders_customer_status_idx ON orders (customer_id, status, created_at DESC);

pgbadger

Pour des rapports HTML hebdomadaires depuis les logs Postgres : pgbadger. Installable sur le VPS, lancé en cron, génère un rapport HTML accessible.

Pour aller plus loin

Besoin d'un site web ?

Confiez-nous la Création de Votre Site Web

Site vitrine, e-commerce ou application web — nous transformons votre vision en réalité digitale. Accompagnement personnalisé de A à Z.

À partir de 250.000 FCFA
Parlons de Votre Projet
Publicité