Téléchargement du traqueur pour PostgreSQL 11, 12, 13, 14 et 15
Téléchargement du traqueur pour PostgreSQL 10
Téléchargement du traqueur pour PostgreSQL 9.6
Téléchargement du traqueur pour PostgreSQL 9.5
Téléchargement du traqueur pour PostgreSQL 9.4
Téléchargement du traqueur pour PostgreSQL 9.3
Journal des changements
Signalement de bugs via le forum
Licence identique à celle de PostgreSQL, open source type BSD
Dossier des versions
Le traqueur permet de cerner la cause des ralentissements des traitements lorsque lactivité a lieu en base. Il permet donc de ne pas passer inutilement du temps et de largent à tuner la base de données, à ajouter de la puissance CPU, à poser des index etc. si les causes de ralentissement sont extérieures.
Il est cependant parfois assez difficile de convaincre les autres acteurs que vous ne pouvez rien faire pour eux. Dans cet article, je vais utiliser un test case mais il simule parfaitement un cas réel que jai rencontré plusieurs fois en production. Nous sommes en plein milieu du traitement lent qui boucle, démonstration :
Le décor est planté. Une requête très rapide est régulièrement lancée par le process 3956 qui doit lexécuter des dizaines de milliers de fois pour achever le traitement. Le process ne fait pas RIEN en base mais le temps dactivité sur PostgreSQL est négligeable par rapport au temps horloge écoulé.
Le traqueur va immédiatement découvrir le pot aux roses :
Pas de process 3956 alors que nous sommes censés être en plein coeur du travail sur la base. Dans la réalité, nous effectuerions plusieurs sessions de traque et/ou une session de traque plus longue afin dinfirmer ou confirmer ce résultat. Le plus simple serait dailleurs dailleurs dexécuter le traqueur en mode batch (option -b) puis de consulter un rapport sur une période significative (option -r). Mais la conclusion serait invariablement la suivante : le process 3956 ne travaille pas ou travaille peu sur la base.
Nous aurions bien sûr fini par tomber sur le process mais, ici, nous ne lavons pas détecté une fois même en collectant lactivité tous les centièmes de secondes (-s 1). Il faut chercher ailleurs quau niveau base les causes de lenteur du traitement exécuté par le process 3956.
En effet, ce process ne fait certes pas RIEN en base puisque nous savons que de nombreuses requêtes sont exécutées. Mais cela na pas dimportance pour optimiser la performance du traitement.
Le traqueur passe essentiellement son temps à dormir. Il nest pas un outil daudit ou de trace et ne cherche pas à faire la différence entre rien et quasi rien. Cela permet de limiter drastiquement sa consommation de ressources, la paresse a parfois du bon.
Il ne faut cependant pas négliger laspect psychologique. Comme le process 3956 napparaît pas, un interlocuteur pourrait douter de la pertinence de lanalyse par le traqueur. Vous pourriez vous même avoir des doutes sur le fait que vous êtes en train danalyser le bon cluster. Jai donc été amené à ajouter la possibilité déliminer les temps de sommeil, démonstration :
Le process 3956 et la petite requête apparaissent finalement. Cependant, la colonne busy_pc donnant le pourcentage dactivité lié au process 3956 affiche 0 en raison de larrondi. Nous navons donc rien appris de plus mais nous avons VU le process et la requête, ce qui peut rassurer sur la pertinence de la session de traque.
Je déconseille fortement lutilisation de -s 0 dans limmense majorité des cas car le traqueur consomme alors BEAUCOUP de ressources. Cest bien sûr particulièrement ennuyeux pour un outil de troubleshooting et de suivi des performances qui sera souvent utilisé alors que la situation est déjà tendue.