EXPLAIN (ANALYZE, BUFFERS) ...vous ĂȘtes votre outil prĂ©fĂ©rĂ© pour dĂ©couvrir les particularitĂ©s de ce SGBD, alors de nouvelles "puces" utiles de notre service de visualisation et d'analyse des plans explic.tensor.ru vous seront certainement utiles dans cette tĂąche difficile.
Mais laissez-moi vous rappeler tout de suite que sans une surveillance complÚte et complÚte de la base de données PostgreSQL, utiliser uniquement l'analyse de plan, c'est agir à partir de la position de sage # 5!

[ source KDPV , "The Blind and the Elephant" ]
, 1940
, ,
.
,
,
, .
, â
.
,
:
â
!
,
,
, ,
.
,
,
,
.
Des conflits ont éclaté parmi les aveugles
et ont duré une année entiÚre.
Puis les aveugles
ont enfin mis leurs mains en mouvement.
Et comme le cinquiÚme était fort,
Il a fermé la bouche de tout le monde.
Et désormais l'éléphant se compose d'
une queue!
Alors, aujourd'hui au programme:
- remplacer "chevrons" par "bretelles"
- nous rassemblons des "méga" plans
- nous gardons une archive personnelle
- étudier la généalogie des plans
- regarder dans les "fenĂȘtres"
Pas une seule couleur!
Historiquement, lors de la visualisation du plan, nous avons marquĂ© les nĆuds "les plus chauds" avec un "chevron" vertical Ă gauche de la valeur - plus la valeur est Ă©levĂ©e, plus la couleur est riche.
Mais dans un tel modĂšle, le rapport des valeurs est mal perçu - par exemple, un Ă©cart de 30% dans la diffĂ©rence de nuances ne peut ĂȘtre remarquĂ© que par un Ćil averti. Par consĂ©quent, nous avons fait un histogramme Ă partir de "bretelles" horizontales.
Statistiques utiles pour les "méga" plans
Beaucoup de gens ne remarquent pas l'onglet «Statistiques» du plan, le voici à droite:
Et celui qui l'a remarquĂ© - l'a Ă peine utilisĂ©. Nous avons dĂ©cidĂ© de corriger cette omission et de la rendre vraiment utile pour analyser les plans «volumineux» (plus de 100 nĆuds).
Regroupement des nĆuds
Tous les nĆuds de plan "identiques" (c'est-Ă -dire ceux qui ont le mĂȘme type de nĆud, la mĂȘme table utilisĂ©e et le mĂȘme index) sont regroupĂ©s dans une ligne de table. Dans ce cas, tous leurs indicateurs (temps d'exĂ©cution, nombre d'enregistrements lus et rejetĂ©s, le nombre total de passes et la quantitĂ© de donnĂ©es lues) sont additionnĂ©s.
Et pour plus de clartĂ©, chaque type de nĆud porte une Ă©tiquette de couleur:
- rouge - la lecture des données
noeudsSeq Scan,Index Scan,CTE Scanet divers autres... Scan - jaune - traitement des données
noeudsSort,Unique,Aggregate,Group,Materialize, ... - vert - connexion
nĆudsNested Loop,Merge Join,Hash Join, ...
Tri selon n'importe quel indicateur
Si soudainement vous avez besoin d'une analyse non pas par le temps total, mais par le type de nĆud, par exemple - cliquez simplement sur l'en-tĂȘte de colonne - et tout sera:
Indice de nĆud contextuel
Pour comprendre en dĂ©tail la contribution d'un nĆud spĂ©cifique dans le groupe, survolez le nombre de l'un d'entre eux - et vous verrez l'indication traditionnelle de ce qui s'y est exactement passĂ©:
Archives personnelles des plans
"Sans inscription et SMS!"Si vous utilisez activement notre service, il sera maintenant beaucoup plus facile de trouver vos plans précédemment analysés - il vous suffit de passer à l'onglet «mine» dans l'archive . Les plans tombent ici indépendamment de la publication dans les archives générales et ne sont visibles que par vous.
Généalogie des plans
Auparavant, il Ă©tait assez difficile de trouver un spĂ©cifique de vos plans dans les archives, maintenant c'est simple. Ils peuvent ĂȘtre nommĂ©s et regroupĂ©s dans un «arbre gĂ©nĂ©alogique» d'optimisations!
Il suffit de spécifier un nom lors de l'ajout d'un plan:
... ou sur un plan existant, vous pouvez le définir, modifier ou ajouter un plan lié:
Ensuite, vous pouvez rapidement basculer dans l'arborescence des options afin d'évaluer l'effet de certaines optimisations:
Et si un lien vers un plan spĂ©cifique soudainement perdu, il peut ĂȘtre facilement identifiĂ© par son nom dans ses archives personnelles:
Nous scrutons les "fenĂȘtres"
Une petite mais utile amĂ©lioration de Query Profiler , dont j'ai parlĂ© plus tĂŽt - nous lui avons appris à «regarder dans les fenĂȘtres» et Ă mapper correctement les nĆuds de planification:
-> WindowAgg ==> WINDOW / OVER
-> Sort ==> PARTITION BY / ORDER BY
... comme plusieurs définitions indépendantes de "window" (
WINDOW) dans une seule requĂȘte:
... et le tri dans les fonctions de fenĂȘtre sans dĂ©finition explicite:
Bonne chasse aux différentes inefficacités!