sql >> Database >  >> RDS >> Database

Het kantelpunt visualiseren met Plan Explorer

Het omslagpunt is een term die ik voor het eerst hoorde gebruiken door SQL Server-goeroe voor het afstemmen van prestaties en Kimberly Tripp, oud lid van de SentryOne Advisory Board - ze heeft hier een geweldige blogserie over. Het omslagpunt is de drempel waarop een zoekplan zal "kantelen" van het zoeken naar een niet-bedekkende niet-geclusterde index naar het scannen van de geclusterde index of heap. De basisformule, die geen vaste regel is omdat er verschillende andere beïnvloedende factoren zijn, is deze:

  • Een geclusterde index (of tabel) scan zal vaak plaatsvinden wanneer het geschatte aantal rijen meer is dan 33% van het aantal pagina's in de tabel
  • Een niet-geclusterde zoek- en sleutelzoekopdracht vindt vaak plaats wanneer het geschatte aantal rijen minder is dan 25% van de pagina's in de tabel
  • Tussen 25% en 33% kan het alle kanten op

Merk op dat er andere "omslagpunten" zijn voor optimalisatie, zoals wanneer een dekking index zal tippen van een zoekopdracht naar een scan, of wanneer een zoekopdracht parallel loopt, maar waar we ons op richten is de niet-bedekkende niet-geclusterde index scenario omdat het de meest voorkomende is - het is moeilijk om elke vraag te beantwoorden! Het is ook potentieel gevaarlijk voor de prestaties, en als je iemand hoort verwijzen naar het kantelpunt van de SQL Server-index, is dit meestal wat ze bedoelen.

Het kantelpunt in eerdere versies van Plan Explorer

Plan Explorer heeft eerder het netto-effect laten zien van het omslagpunt wanneer het snuiven van parameters in het spel is op de Indexanalyse tabblad, met name via de Geschatte (geschatte) bewerking rij in de Parameters deelvenster:

De geschatte bewerking voor de gecompileerde en runtime-parameters, op basis van het aantal rijen

Als u de module Indexanalyse nog niet hebt onderzocht, raad ik u aan dit te doen. Hoewel het plandiagram en andere Plan Explorer-functies geweldig zijn, is Indexanalyse de plek waar u de meeste tijd zou moeten besteden aan het afstemmen van query's en indexen. Bekijk hier Aaron Bertrand's diepgaande bespreking van functies en scenario's, en een geweldige dekkende index-tutorial door Devon Leann Wilson hier.

Achter de schermen doen we de omslagpuntberekening en voorspellen we de indexbewerking (zoeken of scannen) op basis van de geschatte rijen en het aantal pagina's in de tabel voor zowel de gecompileerde als de runtime-parameters, en vervolgens kleurcoderen we de bijbehorende cellen zodat je kunt snel zien of ze overeenkomen. Als dit niet het geval is, zoals in het bovenstaande voorbeeld, kan dit een sterke aanwijzing zijn dat u een probleem heeft met het snuiven van parameters.

Het Statistiekenhistogram grafiek geeft de verdeling van waarden voor de leidende sleutel van de index weer met behulp van kolommen voor gelijke rijen (oranje) en bereikrijen (blauwgroen). Dit zijn dezelfde waarden die u krijgt van DBCC SHOW_STATISTICS of sys.dm_db_stats_histogram . De delen van de distributie die worden getroffen door zowel de gecompileerde als de runtime-parameters worden gemarkeerd om u een idee te geven van het aantal rijen dat bij elke rij betrokken is. Selecteer gewoon de Samengestelde waarde of Runtime-waarde kolom om het geselecteerde bereik te zien:

Histogramgrafiek met het bereik dat wordt bereikt door de runtime-parameters

Nieuwe bedieningselementen en afbeeldingen

De bovenstaande functies waren leuk, maar ik heb een tijdje het gevoel gehad dat we meer konden doen om dingen duidelijker te maken. In de nieuwste versie van Plan Explorer (2020.8.7) heeft de onderkant van het deelvenster Parameters dus enkele nieuwe bedieningselementen met bijbehorende afbeeldingen op de histogramgrafiek:

Nieuwe besturingselementen voor histogramvisuals

Houd er rekening mee dat het histogram dat standaard wordt weergegeven voor de index is die door de query wordt gebruikt om toegang te krijgen tot de geselecteerde tabel, maar u kunt op een andere indexkop of tabelkolom in het raster klikken om een ​​ander histogram te bekijken.

Bereik omslagpunt

Het Omslagpuntbereik selectievakje schakelt de lichtrode band die op de histogramkaart wordt weergegeven, in:

Toggle voor Tipping Point Range-band

Als de geschatte rijen onder dit bereik liggen, geeft de optimizer de voorkeur aan zoeken + opzoeken en daarboven een tabelscan. Binnen het bereik is iedereen te raden.

Geschatte (geschatte)/werkelijke rijen

De Geest/werkelijke rijen checkbox schakelt tussen weergave van geschatte rijen (van de gecompileerde parameters) en werkelijke rijen (van de runtime-parameters). De pijlen in de onderstaande grafiek illustreren de relatie tussen dit besturingselement en de bijbehorende elementen:

Toggle voor geschatte en werkelijke rijen op de histogramgrafiek

In dit voorbeeld is het duidelijk dat de geschatte rijen onder het omslagpunt liggen en de daadwerkelijk geretourneerde rijen erboven, wat wordt weerspiegeld in het verschil tussen de weergegeven geschatte en werkelijke bewerkingen (Seek vs Scan). Dit is klassiek parametersnuiven, geïllustreerd!

In een toekomstig bericht zal ik ingaan op hoe dit correleert met wat je ziet op het plandiagram en het overzichtsraster. In de tussentijd is hier een Plan Explorer-sessiebestand dat dit voorbeeld (seek-to-scan parameter sniffing) en een scan-to-seek-voorbeeld bevat. Beide maken gebruik van de uitgebreide WideWorldImporters-database.

Bereikrijen of Rijen met gemiddeld bereik

Eerdere versies van Plan Explorer stapelden de gelijke rijen en bereikrijen in één kolom om het totale aantal rijen in een histogram-bucket weer te geven. Dit werkt goed als je een ongelijkheid- of bereikpredikaat hebt zoals hierboven weergegeven, maar voor gelijkheidspredikaten heeft het niet veel zin. Wat u echt wilt zien, zijn de rijen met gemiddeld bereik, want dat is wat de optimizer zal gebruiken voor de schatting. Helaas was er geen manier om dit te krijgen.

In het nieuwe Plan Explorer-histogram gebruiken we in plaats van een gestapelde kolomreeks nu geclusterde kolommen met de gelijke rijen en bereikrijen naast elkaar, en jij bepaal of u de rijen met het totale of gemiddelde bereik wilt weergeven met behulp van de Bereikrijen / Gemiddelde bereikrijen kiezer. Binnenkort meer hierover…

Afronden

Ik ben erg enthousiast over deze nieuwe functies en ik hoop dat je ze nuttig vindt. Probeer ze uit door de nieuwe Plan Explorer te downloaden. Dit was slechts een korte introductie en ik kijk ernaar uit om hier enkele verschillende scenario's te bespreken. Laat ons zoals altijd weten wat je ervan vindt!


  1. Voor Nvarchar (Max) krijg ik maar 4000 tekens in TSQL?

  2. Hoe de automatisch gegenereerde primaire sleutel te bepalen die wordt gebruikt als externe sleutel voor een andere tabel?

  3. Oracle TNS-namen worden niet weergegeven bij het toevoegen van een nieuwe verbinding met SQL Developer

  4. Hoe ORA-06512 op regelnummer op te lossen