PostgreSQL : identifier les requêtes lentes

Pour identifier rapidement les requêtes qui prennent beaucoup de temps avec un impact minimum sur l'environnement d'exécution, on peut demander à PostgreSQL d'écrire dans les journaux (logs) les requêtes dépassant un certain temps d'exécution.

Note : contrairement à pg_stat_statements, les opérations qui suivent peuvent être réalisées sans redémarrer/recharger le serveur PostgreSQL.

Pour écrire les requêtes SQL dépassant un temps d'exécution de 2s dans les journaux PostgreSQL, exécuter cette commande (il faudra être owner de la base mabase ou admin PostgreSQL) :

-- log les requêtes qui mettent plus de 2s
ALTER DATABASE mabase SET log_min_duration_statement = 2000;

On peut alors se connecter sur mabase et vérifier que la valeur de log_min_duration_statement a bien changé :

\c mabase
select current_setting('log_min_duration_statement')::interval;

À partir de cet instant, les requêtes dépassant notre seuil de 2s de temps d'exécution sont loguées dans les journaux PostgreSQL (typiquement dans /var/log/postgresql/postgresql-*-main.log).

Attention à ne pas laisser indifiniment la journalisation de ces requêtes actives : elles peuvent remplir les logs de façon significatives.

Pour désactiver ces logs, exécuter cette requête :

ALTER DATABASE mabase SET log_min_duration_statement = -1;