sql >> Database >  >> RDS >> Sqlserver

De GUI van SQL Server 2016 Query Store verkennen

Inleiding

Query store is een nieuwe functie, geïntroduceerd in SQL Server 2016, die databasebeheerders in staat stelt om historische query's en de bijbehorende plannen te beoordelen met behulp van de GUI die beschikbaar is in SQL Server Management Studio, en om queryprestaties te analyseren met behulp van bepaalde Dynamic Management Views. Query Store is een configuratieoptie met databasebereik en is beschikbaar voor gebruik als het compatibiliteitsniveau van de database in kwestie 130 is.

Query Store is vergelijkbaar met technologieën in het Oracle-databaseplatform als Automatic Workload Repository (AWR). De AWR legt prestatiestatistieken vast op een nog grotere schaal dan Query Store en stelt een databasebeheerder in staat om prestaties historisch te analyseren. Concepten als een bewaartermijn en opslaglimieten van verzamelde gegevens zijn beschikbaar in de AWR-architectuur zoals ze zijn in Query Store. De volgende belangrijke configuratie-opties zijn beschikbaar bij het inschakelen van Query Store:

  • Bedrijfsmodus: Bepaalt of Query Store nieuw vastgelegde gegevens accepteert (ReadWrite-modus) of alleen oude gegevens opslaat die beschikbaar zijn voor rapporten (Read-only-modus)
  • Interval voor gegevensspoeling: Bepaalt hoe vaak de geheugenbuffers van de Query Store worden leeggemaakt naar een schijf. Bedenk dat Query Store-gegevens worden opgeslagen in de database waarin Query Store is ingeschakeld. De standaardwaarde is 15 minuten.
  • Interval voor het verzamelen van statistieken: Bepaalt hoe vaak runtime-statistieken voor querystores worden verzameld.
  • Maximale grootte: Bepaalt hoeveel de repository voor Query Store-statistieken kan groeien. Standaard is dit 100 MB.
  • Query Store-opnamemodus: Bepaalt de granulariteit van het vastleggen van query's. ALLE, AUTO en GEEN zijn de beschikbare opties. De standaardwaarde is AUTO.
  • Opruimingsmodus op basis van grootte: Bepaalt of Query Store oude gegevens zal wissen wanneer de maximale grootte is bereikt.
  • Verouderde zoekopdrachtdrempel: Bepaalt het aantal dagen dat Query Store gegevens bewaart. De standaardwaarde is ingesteld op dertig dagen.

Fig. 2 Query Store-opties

Query store is een functie voor databasebereik die kan worden ingeschakeld met behulp van de GUI (SQL Server Management Studio) of door de volgende opdracht uit te voeren:

WIJZIG DATABASE [WideWorldImporters] SET QUERY_STORE =AAN;

De query-telemetrie die door Query Store wordt verzameld, wordt opgeslagen in systeemtabellen in de database waarin Query Store is ingeschakeld.

Voorbeeldquery's en standaardrapporten

Tot nu toe is alles wat ik heb geschreven beschikbaar via vele andere bronnen; sommige zijn te vinden in de sectie referenties.

In dit gedeelte gaan we wat dieper in op wat we met Query Store kunnen doen als we het eenmaal hebben ingeschakeld aan de hand van eenvoudige voorbeelden. Laten we eens kijken naar de volgende twee vragen:

Lijst 1:records ophalen met een specifiek filter

gebruik WideWorldImportersgoselecta.ContactPersonID,a.OrderDate,a.DeliveryMethodID,a.Comments,b.OrderedOutersfromPurchasing.PurchaseOrders en sluit je aan bij Purchasing.PurchaseOrderLines bon a.PurchaseOrderID=b.M.L.PurchaseOrderID=b.LIDPurchaseOrder300

pre>

Lijst 2:Records ophalen met een bereik

gebruik WideWorldImportersgoselecta.ContactPersonID,a.OrderDate,a.DeliveryMethodID,a.Comments,b.OrderedOutersfromPurchasing.PurchaseOrders ainner join Purchasing.PurchaseOrderLines bon a.PurchaseOrderID=b.I.D.PurchaseOrder%. /pre> 

Let op de alternatieve versie van deze zoekopdrachten die in hoofdletters zijn geschreven:

Lijst 1:records ophalen met een specifiek filter (hoofdletters)

GEBRUIK WIDEWORLDIMPORTERSGOSELECTA.CONTACTPERSONID,A.ORDERDATE,A.DELIVERYMETHODID,A.COMMENTS,B.ORDEREDOUTERSFROMPURCHASING.PURCHASEORDERS AINNER WORD LID VAN PURCHASING.PURCHASEORDERLINES'.GO.PURCHASEORDERLINES BON A.SEPURCHASEORDERLINES BON A.SEPURCHASEORDER pre> 

Lijst 2:Records ophalen met een bereik (hoofdletters)

GEBRUIK WIDEWORLDIMPORTERSGOSELECTA.CONTACTPERSONID,A.ORDERDATE,A.DELIVERYMETHODID,A.COMMENTS,B.ORDEREDOUTERSFROMPURCHASING.PURCHASEORDERS AINNER WORD LID VAN PURCHASING.PURCHASEORDERLINES.GO.PURCHASING.PURCHASEORDERLINES. /pre> 

Zoals u kunt zien, hebben we deze zoekopdrachten meerdere keren uitgevoerd met het GO-sleutelwoord. We hebben dus een redelijke hoeveelheid gegevens om mee te werken. Het eerste waar we ons van bewust moeten zijn wanneer we Query Store gebruiken om de prestaties te analyseren, is dat er zes standaardrapporten zijn ingebouwd in de SQL Server 2016 Query Store, zoals weergegeven in figuur 3.

Fig. 3 Query Store-rapporten

De namen van de rapporten worden gedetailleerd beschreven in de vorige artikelen en in de Microsoft-documentatie. De gegevens die door deze rapporten worden geleverd, worden opgehaald uit de belangrijkste dynamische managementweergaven die hieronder worden vermeld:

DMV's voor planstatistieken

  • sys.query_store_query_text – bevat unieke zoekteksten die tegen de database worden uitgevoerd
  • sys.query_store_plan – bevat een geschat plan voor de zoekopdracht met de statistieken over de compileertijd
  • sys.query_context_settings – bevat enkele unieke combinaties van het plan die de instellingen beïnvloeden waaronder zoekopdrachten worden uitgevoerd
  • sys.query_store_query - query-items die afzonderlijk worden bijgehouden en geforceerd in de Query Store

Runtime-statistieken DMV's

  • sys.query_store_runtime_stats_interval – Query Store verdeelt de tijd in automatisch gegenereerde tijdvensters (intervallen) en slaat geaggregeerde statistieken op over dat interval voor elk uitgevoerd plan
  • sys.query_store_runtime_stats – bevat geaggregeerde runtime-statistieken voor uitgevoerde plannen

Veel meer details over het gebruik van deze DMV's zijn beschikbaar in de Microsoft-documentatie waarnaar wordt verwezen. In dit artikel zullen we de GUI het meest gebruiken.

Zoals je kunt zien in figuur 4, bekijken we het rapport 'Algemeen verbruik van hulpbronnen', terwijl we ons in het volgende gedeelte beperken tot de eerder genoemde zoekopdrachten en de gegevens die we uit deze eenvoudige zoekopdrachten kunnen halen.

Afb. 4 Rapport over algemeen verbruik van hulpbronnen

Query's analyseren met behulp van de GUI

Een paar belangrijke dingen moeten als nuttig worden beschouwd bij het gebruik van de Query Store-rapporten:

  • U kunt de omgeving configureren door op de knop te klikken die is gemarkeerd in Afb. 4. Afb. 5 toont ons de details die we kunnen wijzigen om aan onze gebruikssituatie te voldoen:criteria van gegevens die moeten worden geretourneerd, datumbereik en gegevensset die moeten worden geretourneerd. Als ik bijvoorbeeld duidelijk de Query-ID wil zien die is gekoppeld aan de query's die ik aan het beoordelen ben, wil ik mijn dataset terugbrengen van de standaard Top 25 naar Top 10, bijvoorbeeld.

    Afb. 5 Rapportconfiguratie-opties

    Fig. 6 Top 25 uitgevoerde zoekopdrachten op 1 mei 2018

    Fig. 7 Top 10 uitgevoerde zoekopdrachten op 1 mei 2018

  • De staafdiagrammen geven gegevens meestal met de tijd weer op de x-as, maar u kunt inzoomen op een specifiek gegevenspunt om gegevens te bekijken op basis van query-ID's. Elke Query-ID bepaalt een specifieke query. Het is belangrijk op te merken dat een zoekopdracht uniek wordt geïdentificeerd door de tekst te hashen. Een zoekopdracht in kleine letters verschilt dus van dezelfde zoekopdracht in hoofdletters. Dit zou algemeen bekend moeten zijn:ad-hocquery's zijn een zorg voor de plancache en ze zijn ook slecht voor de querystore, zowel wat betreft het ruimtegebruik als de juiste analyse.

    Fig. 8 Query in lijst 1 (kleine letters, query 42480)

    Fig. 9 Zoekopdracht in lijst 3 (hoofdletters, vraag 42490)

  • De derde belangrijke opmerking is het feit dat wanneer een gegevenspunt groen is gemarkeerd, het gedetailleerde uitvoeringsplan dat in het onderste deelvenster wordt weergegeven, betrekking heeft op dat gegevenspunt. In Fig. 7 verwijst dit gegevenspunt naar Query-ID 42481 die we eerder hebben uitgevoerd (volledige query weergegeven in Listing 2). Door met onze muis over dit gegevenspunt te bewegen, worden de zoekopdracht, de ID en het aantal plannen dat aan deze zoekopdracht is gekoppeld, weergegeven (zie Fig. 8).

    Afb. 10 Vraag 42481 Details

    Onze query is 1391 keer uitgevoerd omdat deze nauwkeurig wordt vastgelegd door Query Store en wordt weergegeven op de y-as (aantal uitvoeringen) van het staafdiagram in Fig. 10. Het rapport werd opgehaald terwijl de batch nog bezig was. We hebben dus niet de volledige telling (1500) die ons informeert dat er elke keer dat een query wordt uitgevoerd een realtime gegevensverzameling is. Aan de rechterkant zien we ook dat het Plan wordt gebruikt voor deze meervoudige uitvoeringen (Plan 675). We kunnen dit verifiëren met behulp van de zoekopdracht in Listing 5.

Vermelding 5

GEBRUIK WideWorldImportersGOSELECT Txt.query_text_id, Txt.query_sql_text, Pl.plan_id, Qry.*FROM sys.query_store_plan AS PlJOIN sys.query_store_query AS Qry ON Pl.queryt_id =Qry.query_idquery. .query_text_idwhere Qry.query_id=42481;

Fig. 11 Query-ID en abonnement-ID van DMV's

Een beetje afstemmen

Laten we een andere vraag bekijken.

Wanneer we de query in Listing 6 uitvoeren en de details van Query Store onderzoeken, blijkt uit de details van het uitvoeringsplan dat we een index nodig hebben om een ​​verbetering van 51% te krijgen.

Vermelding 6:suboptimale zoekopdracht

SELECT TOP (1000) [OrderLineID] ,[OrderID] ,[StockItemID] ,[Description] ,[PackageTypeID] ,[Quantity] ,[Eenheidsprijs] ,[TaxRate] ,[PickedQuantity] ,[PickingCompletedWhen] ,[LastEditedBy ] ,[LastEditedWhen] FROM [WideWorldImporters].[Sales].[OrderLines] waar eenheidsprijs> 1000 GO 2000

Fig. 12 Suboptimale querydetails

Afb. 13 Suboptimaal uitvoeringsplan voor query's

Zodra we de aanbevolen index hebben gemaakt met behulp van de instructie in Listing 7, zorgen we ervoor dat de Query Optimizer een nieuw uitvoeringsplan genereert. In dit geval wordt verwacht dat het nieuwe uitvoeringsplan de prestaties zal verbeteren. Er zijn echter gevallen waarin bepaalde wijzigingen kunnen leiden tot verslechterde prestaties, zoals significante wijzigingen in het gegevensvolume die statistieken in feite ongeldig maken of het aantal indexen verminderen, enzovoort. Van dergelijke zoekopdrachten wordt gezegd dat ze achteruitgaan in prestaties en kunnen worden onderzocht met behulp van het rapport Regressieve zoekopdrachten in de Query Store.

Vermelding 7:Index maken

GEBRUIK [WideWorldImporters]GOCREATE NONCLUSTERED INDEX [Custom_IX_UnitPrice]ON [Sales].[OrderLines] ([UnitPrice])INCLUDE([OrderLineID],[OrderID],[StockItemID],[Description],[PackageTypeID],[Quantity ],[TaxRate],[PickedQuantity],[PickingCompletedWhen],[LastEditedBy],[LastEditedWhen])GO

Fig. 14 Geoptimaliseerde query (wijziging in uitvoeringsplan)

Fig. 15 Geoptimaliseerde zoekopdracht (twee plannen)

Fig. 16 Geoptimaliseerde query (Force Plan)

Als er meerdere plannen zijn voor een query, zoals weergegeven in Fig. 14 en Fig. 16, kunnen we de optimizer vertellen om altijd een plan te gebruiken dat we kiezen door op de knop Force Plan te klikken. Dit was een beetje vervelende taak in de vorige versies van SQL Server.

Zoals je kunt zien in figuur 17, stelt Query Store ons in staat om de verschillende abonnementen die aan een zoekopdracht zijn gekoppeld, te vergelijken met behulp van een aantal statistieken.

Fig. 17 Uitvoeringsplannen vergelijken

Nogmaals, we kunnen de query in Listing 8 gebruiken om de plannen die aan deze query-ID zijn gekoppeld, te verifiëren met behulp van DMV's. (Zie Afb. 11)

Lijst 8:Plannen die zijn gekoppeld aan Query 42497

GEBRUIK WideWorldImportersGOSELECT Txt.query_text_id, Txt.query_sql_text, Pl.plan_id, Qry.*FROM sys.query_store_plan AS PlJOIN sys.query_store_query AS Qry ON Pl.queryt_id =Qry.query_idquery. .query_text_idwhere Qry.query_id=42497;

Variaties verkennen

Een ander nuttig rapport dat Query Store ons ter beschikking stelt, is de Query's With High Variation. Dit rapport laat ons zien hoe ver de gewenste statistieken voor een specifieke zoekopdracht over een bepaalde periode uit elkaar liggen. Dit is erg handig voor historische analyse van prestaties. Met behulp van de uitspraken in Listing 9 genereren we gegevens die een beeld kunnen geven van hoe variaties eruit zouden zien. De stappen in de procedure maken eenvoudig een kleine tabel en voegen vervolgens records in met verschillende batchgroottes.

Lijst 9:Plannen die zijn gekoppeld aan Query 42497

gebruik WideWorldImportersgo-- Maak een Tablecreate table tableone(ID int identity(1000,1),FirstName varchar(30),LastName varchar(30),CountryCode char(2),HireDate datetime2 default getdate());-- Records invoegen in batches van verschillende groottesinsert in tableone-waarden ('Kenneth','Igiri','NG',getdate());GO 10000insert in tableone-waarden ('Kwame','Boateng','GH', getdate());GO 10insert in tableone-waarden ('Philip','Onu','NG',getdate());GO 100000insert in tableone-waarden ('Kwesi','Amah','GH', getdate());GO 100

Query Store toont ons details zoals de minimum- en maximumwaarden van deze metrieken voor specifieke uitvoeringsintervallen van de zoekopdracht waarin we geïnteresseerd zijn. In dit voorbeeld zien we dat dit eenvoudigweg het resultaat is van het aantal batches per uitvoering (merk op dat de parameters daadwerkelijk worden gebruikt om de INSERT-instructie uit te voeren). In de productie kunnen andere factoren verantwoordelijk zijn voor dergelijke variaties.

Afb. 18 Variaties in duur

Afb. 19 Variatie in logische schrijfbewerkingen

Afb. 20 Variatie in fysieke uitlezingen

Conclusie

In dit artikel hebben we de SQL Server 2016 Query Store GUI-omgeving bekeken en een paar dingen die we kunnen afleiden met betrekking tot de prestaties van onze instantie (met betrekking tot SQL) met behulp van Query Store. Er zijn verschillende artikelen op internet die nog geavanceerdere use-cases en een veel diepere uitleg van de internals laten zien. Dit artikel zou nuttig moeten zijn voor DBA's op het middenniveau die een voorsprong willen hebben bij het gebruik van Query Store voor prestatie-evaluatie/-afstemming.

Referenties

  • Beste werkwijze met de Query Store
  • Cristiman, L. (2016) Query Store – Instellingen en limieten
  • Prestaties volgen met behulp van de Query Store
  • Query Store-catalogusweergaven
  • Query Store opgeslagen procedures
  • Query Store – Hoe het werkt en hoe het te gebruiken
  • Gebruiksscenario's voor zoekopdracht opslaan
  • Van de Lar, E. (2016) SQL Server 2016 Query Store:uitvoeringsplannen afdwingen met behulp van de Query Store

Handig hulpmiddel:

dbForge Query Builder voor SQL Server – stelt gebruikers in staat om snel en eenvoudig complexe SQL-query's te bouwen via een intuïtieve visuele interface zonder handmatig code schrijven.


  1. Hoe de BETWEEN-operator in SQL Server te gebruiken?

  2. SQL Server Failover Cluster Installatie -1

  3. Sum, Avg en Count gebruiken in Select Statement - SQL Server / TSQL Tutorial Part 128

  4. Bulksgewijs invoegen in Oracle-database:wat is beter:VOOR Cursorlus of een eenvoudige Select?