Le point de basculement est un terme que j'ai entendu pour la première fois utilisé par le gourou du réglage des performances de SQL Server et membre de longue date du conseil consultatif de SentryOne, Kimberly Tripp - elle a une excellente série de blogs à ce sujet ici. Le point de basculement est le seuil auquel un plan de requête basculera de la recherche d'un index non clusterisé non couvrant à l'analyse de l'index clusterisé ou du tas. La formule de base, qui n'est pas une règle absolue car il existe divers autres facteurs d'influence, est la suivante :
- Une analyse d'index groupé (ou de table) se produit souvent lorsque le nombre de lignes estimé dépasse 33 % du nombre de pages de la table
- Une recherche non groupée plus une recherche de clé se produit souvent lorsque le nombre de lignes estimé est inférieur à 25 % des pages du tableau
- Entre 25 % et 33 %, cela peut aller dans les deux sens
Notez qu'il existe d'autres "points de basculement" de l'optimiseur, comme lorsqu'une couverture index passera d'une recherche à une analyse, ou lorsqu'une requête ira en parallèle, mais celle sur laquelle nous nous concentrons est l'index non clusterisé non couvrant scénario car il a tendance à être le plus courant - il est difficile de couvrir toutes les requêtes ! C'est aussi potentiellement le plus dangereux pour les performances, et lorsque vous entendez quelqu'un faire référence au point de basculement de l'index SQL Server, c'est généralement ce qu'il veut dire.
Le point de basculement dans les versions précédentes de Plan Explorer
Plan Explorer a précédemment montré l'effet net du point de basculement lorsque le reniflage de paramètres est en jeu sur l'analyse d'index , notamment via l'Opération Estimée rangée dans les Paramètres volet :
Opération estimée pour les paramètres compilés et d'exécution, basée sur le nombre de lignes
Si vous n'avez pas encore exploré le module Index Analysis, je vous encourage à le faire. Bien que le diagramme de plan et les autres fonctionnalités de Plan Explorer soient excellentes, franchement, l'analyse d'index est l'endroit où vous devriez passer le plus de temps lors du réglage des requêtes et des index. Découvrez l'examen approfondi des fonctionnalités et des scénarios d'Aaron Bertrand ici, et un excellent didacticiel sur l'index de couverture par Devon Leann Wilson ici.
Dans les coulisses, nous effectuons les calculs du point de basculement et prédisons l'opération d'indexation (recherche ou analyse) en fonction des lignes estimées et du nombre de pages dans la table pour les paramètres compilés et d'exécution, puis codez en couleur les cellules associées afin que vous pouvez rapidement voir s'ils correspondent. Si ce n'est pas le cas, comme dans l'exemple ci-dessus, cela peut être un indicateur fort que vous avez un problème de reniflage de paramètres.
L'histogramme des statistiques Le graphique reflète la distribution des valeurs pour la clé principale de l'index en utilisant des colonnes pour les lignes égales (orange) et les lignes de plage (bleu sarcelle). Ce sont les mêmes valeurs que vous obtiendrez de DBCC SHOW_STATISTICS ou sys.dm_db_stats_histogram . Les parties de la distribution touchées par les paramètres compilés et d'exécution sont mises en surbrillance pour vous donner une idée approximative du nombre de lignes impliquées pour chacune. Sélectionnez simplement la Valeur compilée ou Valeur d'exécution colonne pour voir la plage sélectionnée :
Graphique d'histogramme montrant la plage atteinte par les paramètres d'exécution
Nouveaux contrôles et visuels
Les fonctionnalités ci-dessus étaient intéressantes, mais pendant un certain temps, j'ai senti que nous pouvions faire plus pour rendre les choses plus claires. Ainsi, dans la dernière version de Plan Explorer (2020.8.7), le bas du volet Paramètres comporte de nouvelles commandes avec des visuels associés sur l'histogramme :
Nouveaux contrôles pour les visuels d'histogramme
Notez que l'histogramme affiché par défaut correspond à l'index utilisé par la requête pour accéder à la table sélectionnée, mais vous pouvez cliquer sur n'importe quel autre en-tête d'index ou colonne de table dans la grille pour afficher un autre histogramme.
Plage du point de basculement
La fourchette des points de basculement case à cocher bascule la bande rouge clair affichée sur l'histogramme :
Basculer pour la bande de plage de point de basculement
Si les lignes estimées sont inférieures à cette plage, l'optimiseur privilégiera une recherche + une recherche, et au-dessus une analyse de table. À l'intérieur de la plage, tout le monde peut deviner.
Lignes estimées/réelles
Les Lignes Est/Réelles case à cocher bascule l'affichage des lignes estimées (à partir des paramètres compilés) et des lignes réelles (à partir des paramètres d'exécution). Les flèches du graphique ci-dessous illustrent la relation entre ce champ et les éléments associés :
Basculer entre les lignes estimées et réelles sur l'histogramme
Dans cet exemple, il est clair que les lignes estimées sont en dessous du point de basculement et que les lignes réelles renvoyées sont au-dessus, ce qui se reflète dans la différence entre les opérations estimées et réelles répertoriées (Rechercher vs Analyser). C'est du reniflage de paramètres classique, illustré !
Dans un prochain article, j'examinerai en quoi cela correspond à ce que vous voyez sur le diagramme de plan et la grille des déclarations. En attendant, voici un fichier de session Plan Explorer qui contient cet exemple (reniflage des paramètres de recherche vers balayage) ainsi qu'un exemple de balayage vers recherche. Les deux tirent parti de la base de données élargie de WideWorldImporters.
Lignes de plage ou lignes de plage moyenne
Les versions précédentes de Plan Explorer empilaient les lignes égales et les lignes de plage dans une colonne pour représenter le nombre total de lignes dans un compartiment d'histogramme. Cela fonctionne bien lorsque vous avez un prédicat d'inégalité ou de plage comme indiqué ci-dessus, mais pour les prédicats d'égalité, cela n'a pas beaucoup de sens. Ce que vous voulez vraiment voir, ce sont les lignes de la plage moyenne, car c'est ce que l'optimiseur utilisera pour l'estimation. Malheureusement, il n'y avait aucun moyen de l'obtenir.
Dans le nouvel histogramme Plan Explorer, au lieu d'une série de colonnes empilées, nous utilisons désormais des colonnes groupées avec les lignes égales et les lignes de plage côte à côte, et vous contrôler si vous souhaitez afficher les lignes de plage totale ou moyenne, selon le cas, à l'aide des Lignes de plage / Lignes de plage moyenne sélecteur. Plus à ce sujet bientôt…
Conclusion
Je suis vraiment enthousiasmé par ces nouvelles fonctionnalités et j'espère qu'elles vous seront utiles. Essayez-les en téléchargeant le nouveau Plan Explorer. Ce n'était qu'une brève introduction, et j'ai hâte de couvrir ici différents scénarios. Comme toujours, dites-nous ce que vous en pensez !