Der Wendepunkt ist ein Begriff, den ich zum ersten Mal von Kimberly Tripp, Guru für Leistungsoptimierung von SQL Server und langjähriges Mitglied des SentryOne Advisory Board, gehört habe – sie hat hier eine großartige Blogserie dazu. Der Wendepunkt ist die Schwelle, an der ein Abfrageplan von der Suche nach einem nicht abdeckenden Nonclustered-Index zum Scannen des Clustered-Index oder Heap „kippt“. Die Grundformel, die keine feste Regel ist, da es verschiedene andere Einflussfaktoren gibt, lautet:
- Ein Clustered-Index- (oder Tabellen-)Scan wird häufig durchgeführt, wenn die geschätzten Zeilen 33 % der Seitenzahl in der Tabelle überschreiten
- Eine nicht geclusterte Suche plus Schlüsselsuche findet häufig statt, wenn die geschätzten Zeilen weniger als 25 % der Seiten in der Tabelle ausmachen
- Zwischen 25 % und 33 % kann es in beide Richtungen gehen
Beachten Sie, dass es andere „Kipppunkte“ des Optimierers gibt, z. B. bei einer Abdeckung Index von einer Suche zu einem Scan führt oder wenn eine Abfrage parallel läuft, aber wir konzentrieren uns auf den nicht abdeckenden Nonclustered-Index Szenario, da es tendenziell am häufigsten vorkommt – es ist schwierig, alle Abfragen abzudecken! Es ist auch potenziell am gefährlichsten für die Leistung, und wenn Sie hören, dass sich jemand auf den Wendepunkt des SQL Server-Index bezieht, ist dies normalerweise gemeint.
Der Wendepunkt in früheren Plan Explorer-Versionen
Plan Explorer hat zuvor den Nettoeffekt des Wendepunkts gezeigt, wenn Parameter-Sniffing in der Indexanalyse im Spiel ist Registerkarte, insbesondere über die Est(imated) Operation Zeile in den Parametern Bereich:
Die geschätzte Operation für die kompilierten und Laufzeitparameter, basierend auf der Anzahl der Zeilen
Wenn Sie das Indexanalysemodul noch nicht erkundet haben, ermutige ich Sie, dies zu tun. Obwohl das Plandiagramm und andere Funktionen des Plan-Explorers großartig sind, sollten Sie ehrlich gesagt die meiste Zeit mit der Indexanalyse verbringen, wenn Sie Abfragen und Indizes optimieren. Sehen Sie sich hier Aaron Bertrands ausführlichen Überblick über Funktionen und Szenarios an, und hier finden Sie ein großartiges Tutorial zum Abdecken von Indizes von Devon Leann Wilson.
Hinter den Kulissen führen wir die Tipping-Point-Mathematik durch und prognostizieren die Indexoperation (Suchen oder Scannen) basierend auf den geschätzten Zeilen und der Anzahl der Seiten in der Tabelle sowohl für die kompilierten als auch für die Laufzeitparameter und codieren dann die zugehörigen Zellen so farblich Sie können schnell sehen, ob sie übereinstimmen. Wenn dies nicht der Fall ist, wie im obigen Beispiel, kann dies ein starker Hinweis darauf sein, dass Sie ein Parameter-Sniffing-Problem haben.
Das Statistikhistogramm Das Diagramm spiegelt die Verteilung der Werte für den führenden Schlüssel des Index wider, wobei Spalten für gleiche Zeilen (orange) und Bereichszeilen (blaugrün) verwendet werden. Dies sind dieselben Werte, die Sie von DBCC SHOW_STATISTICS erhalten oder sys.dm_db_stats_histogram . Die Teile der Verteilung, die sowohl von den kompilierten als auch von den Laufzeitparametern betroffen sind, werden hervorgehoben, um Ihnen eine ungefähre Vorstellung davon zu geben, wie viele Zeilen jeweils betroffen sind. Wählen Sie einfach entweder den Kompilierten Wert aus oder Laufzeitwert Spalte, um den ausgewählten Bereich anzuzeigen:
Histogrammdiagramm, das den von den Laufzeitparametern getroffenen Bereich zeigt
Neue Steuerelemente und Grafiken
Die oben genannten Funktionen waren nett, aber für eine Weile hatte ich das Gefühl, dass wir noch mehr tun könnten, um die Dinge klarer zu machen. In der neuesten Version von Plan Explorer (2020.8.7) befinden sich also unten im Parameterbereich einige neue Steuerelemente mit zugehörigen visuellen Elementen im Histogrammdiagramm:
Neue Steuerelemente für visuelle Histogramme
Beachten Sie, dass das standardmäßig angezeigte Histogramm für den Index gilt, der von der Abfrage verwendet wird, um auf die ausgewählte Tabelle zuzugreifen, aber Sie können auf jede andere Indexkopfzeile oder Tabellenspalte im Raster klicken, um ein anderes Histogramm anzuzeigen.
Kipppunktbereich
Der Kipppunktbereich Kontrollkästchen schaltet das hellrote Band um, das auf dem Histogrammdiagramm angezeigt wird:
Wechseln Sie das Tipping-Point-Range-Band
Wenn die geschätzten Zeilen unterhalb dieses Bereichs liegen, bevorzugt der Optimierer eine Suche + Suche und darüber einen Tabellenscan. Innerhalb des Bereichs kann jeder raten.
Geschätzte (imulierte)/tatsächliche Zeilen
Die Est/Ist-Zeilen Kontrollkästchen schaltet die Anzeige von geschätzten Zeilen (aus den kompilierten Parametern) und tatsächlichen Zeilen (aus den Laufzeitparametern) um. Die Pfeile in der folgenden Tabelle veranschaulichen die Beziehung zwischen diesem Steuerelement und den zugehörigen Elementen:
Umschalten zwischen geschätzten und tatsächlichen Zeilen im Histogrammdiagramm
In diesem Beispiel ist klar, dass die geschätzten Zeilen unter dem Wendepunkt und die tatsächlich zurückgegebenen Zeilen darüber liegen, was sich in der Differenz zwischen den aufgelisteten geschätzten und tatsächlichen Vorgängen widerspiegelt (Seek vs. Scan). Das ist klassisches Parameter-Sniffing, illustriert!
In einem zukünftigen Beitrag werde ich näher darauf eingehen, wie dies mit dem korreliert, was Sie im Plandiagramm und im Aussageraster sehen. In der Zwischenzeit ist hier eine Plan Explorer-Sitzungsdatei, die dieses Beispiel (Seek-to-Scan-Parameter-Sniffing) sowie ein Scan-to-Seek-Beispiel enthält. Beide nutzen die erweiterte WideWorldImporters-Datenbank.
Range Rows oder Average Range Rows
Frühere Versionen des Plan-Explorers haben die gleichen Zeilen und Bereichszeilen in einer Spalte gestapelt, um die Gesamtzahl der Zeilen in einem Histogramm-Bucket darzustellen. Dies funktioniert gut, wenn Sie wie oben gezeigt ein Ungleichheits- oder Bereichsprädikat haben, aber für Gleichheitsprädikate macht es nicht viel Sinn. Was Sie wirklich sehen möchten, sind die durchschnittlichen Bereichszeilen, da der Optimierer diese für die Schätzung verwendet. Leider gab es keine Möglichkeit, dies zu bekommen.
Im neuen Plan Explorer-Histogramm verwenden wir anstelle einer gestapelten Spaltenreihe jetzt geclusterte Spalten mit den gleichen Zeilen und Bereichszeilen nebeneinander und Sie Mit Range Rows / Avg Range Rows können Sie steuern, ob die Zeilen für den gesamten oder den durchschnittlichen Bereich angezeigt werden sollen Wähler. Mehr dazu bald…
Abschluss
Ich freue mich sehr über diese neuen Funktionen und hoffe, dass Sie sie nützlich finden. Probieren Sie sie aus, indem Sie den neuen Plan Explorer herunterladen. Dies war lediglich eine kurze Einführung, und ich freue mich darauf, hier einige verschiedene Szenarien zu behandeln. Teilen Sie uns wie immer Ihre Meinung mit!