Prestaties bewaken met behulp van Query Store
van toepassing op: SQL Server 2016 (13.x) en latere versies
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics (alleen toegewezen SQL-pool)
SQL-database in Microsoft Fabric
De functie Query Store biedt inzicht in de keuze en prestaties van queryplannen voor SQL Server, Azure SQL Database, Fabric SQL Database, Azure SQL Managed Instance en Azure Synapse Analytics. Query Store vereenvoudigt het oplossen van prestatieproblemen doordat u snel prestatieverschillen kunt vinden die worden veroorzaakt door wijzigingen in queryplannen. Query Store legt automatisch een geschiedenis van query's, plannen en runtimestatistieken vast en behoudt deze voor uw beoordeling. Hiermee worden gegevens gescheiden door tijdvensters, zodat u databasegebruikspatronen kunt zien en begrijpt wanneer er wijzigingen in het queryplan op de server zijn aangebracht.
U kunt Query Store configureren met behulp van de optie ALTER DATABASE SET.
- Voor informatie over het uitvoeren van de Query Store in Azure SQL Database, zie Query Store in Azure SQL Database gebruiken.
- Voor informatie over het ontdekken van bruikbare gegevens en het verbeteren van de prestaties, zie Prestaties afstemmen met de Query Store.
- Zie Query Store-hintsvoor meer informatie over het vormgeven van queryplannen zonder toepassingscode te wijzigen.
Belangrijk
Als u Query Store gebruikt voor Just-In-Time-workloadinzichten in SQL Server 2016 (13.x), wilt u de oplossingen voor schaalbaarheid van prestaties zo snel mogelijk installeren in KB-4340759.
Query Store inschakelen
- Query Store is standaard ingeschakeld voor nieuwe Azure SQL Database- en Azure SQL Managed Instance-databases.
- Query Store is niet standaard ingeschakeld voor SQL Server 2016 (13.x), SQL Server 2017 (14.x), SQL Server 2019 (15.x). Deze is standaard ingeschakeld in de
READ_WRITE
-modus voor nieuwe databases vanaf SQL Server 2022 (16.x). Als u functies wilt inschakelen om de prestatiegeschiedenis beter bij te houden, problemen met betrekking tot queryplannen op te lossen en nieuwe mogelijkheden in te schakelen in SQL Server 2022 (16.x), raden we u aan Query Store in te schakelen voor alle databases. - Query Store is niet standaard ingeschakeld voor nieuwe Azure Synapse Analytics-databases.
De Query Store-pagina gebruiken in SQL Server Management Studio
Klik in Objectverkenner met de rechtermuisknop op een database en selecteer Eigenschappen.
Notitie
Vereist ten minste versie 16 van Management Studio.
Selecteer in het dialoogvenster Database-eigenschappen de pagina Query Store.
Selecteer in de bedieningsmodus (aangevraagd) het lezen en schrijvenvak.
Gebruik Transact-SQL-verklaringen
Gebruik de ALTER DATABASE
-instructie om Query Store in te schakelen voor een bepaalde database. Bijvoorbeeld:
ALTER DATABASE <database_name>
SET QUERY_STORE = ON (OPERATION_MODE = READ_WRITE);
Opties voor het configureren van de Query Store in een Fabric SQL-database met ALTER DATABASE
zijn momenteel beperkt.
Schakel in Azure Synapse Analytics de Query Store in zonder extra opties, bijvoorbeeld:
ALTER DATABASE <database_name>
SET QUERY_STORE = ON;
Zie ALTER DATABASE SET Options (Transact-SQL)voor meer syntaxisopties die betrekking hebben op de Query Store.
Notitie
Query Store kan niet worden ingeschakeld voor de master
- of tempdb
-databases.
Belangrijk
Raadpleeg Best Practice met de Query Store-voor informatie over het inschakelen van Query Store en het aanpassen ervan aan uw workload.
Informatie in de Query Store
Uitvoeringsplannen voor een specifieke query in SQL Server veranderen doorgaans in de loop van de tijd vanwege een aantal verschillende redenen, zoals wijzigingen in statistieken, schemawijzigingen, het maken/verwijderen van indexen, enzovoort. In de procedurecache (waarin queryplannen in de cache worden opgeslagen) wordt alleen het meest recente uitvoeringsplan opgeslagen. Plannen worden ook verwijderd uit de plancache vanwege geheugendruk. Als gevolg hiervan kunnen regressies van queryprestaties die worden veroorzaakt door wijzigingen in het uitvoeringsplan, niet-triviaal en tijdrovend zijn om op te lossen.
Omdat Query Store meerdere uitvoeringsplannen per query bewaart, kan het beleid afdwingen om de queryprocessor te leiden om een specifiek uitvoeringsplan voor een query te gebruiken. Dit wordt aangeduid als plan afdwingen. Het afdwingen van een plan in Query Store wordt geleverd door gebruik te maken van een mechanisme dat vergelijkbaar is met de USE PLAN query-hint, maar er zijn geen wijzigingen in gebruikersapplicaties vereist. Plan afdwingen kan een regressie van queryprestaties oplossen die wordt veroorzaakt door een planwijziging in een zeer korte periode.
Notitie
Query Store verzamelt plannen voor DML-instructies, zoals SELECT
, INSERT
, UPDATE
, DELETE
, MERGE
en BULK INSERT
.
Query Store verzamelt standaard geen plannen voor DDL-instructies, zoals CREATE INDEX
, enzovoort. Query Store legt cumulatief resourceverbruik vast door plannen voor de onderliggende DML-instructies te verzamelen. Query Store kan bijvoorbeeld de SELECT
- en INSERT
-instructies weergeven die intern worden uitgevoerd om een nieuwe index te vullen.
Query Store verzamelt standaard geen gegevens voor systeemeigen gecompileerde opgeslagen procedures. Gebruik sys.sp_xtp_control_query_exec_stats om gegevensverzameling in te schakelen voor systeemeigen opgeslagen procedures.
Wachtstatistieken zijn een andere bron van informatie die helpen bij het oplossen van problemen met prestaties in de Database Engine. Wachtstatistieken waren gedurende lange tijd alleen beschikbaar op exemplaarniveau, waardoor het moeilijk was om backtrack-wachttijden op een specifieke query uit te voeren. Vanaf SQL Server 2017 (14.x) en Azure SQL Database bevat Query Store een dimensie waarmee wachtstatistieken worden bijgehouden. In het volgende voorbeeld kan de Query Store wachtstatistieken verzamelen.
ALTER DATABASE <database_name>
SET QUERY_STORE = ON ( WAIT_STATS_CAPTURE_MODE = ON );
Veelvoorkomende scenario's voor het gebruik van de Query Store-functie zijn:
- U kunt snel een planprestatieregressie vinden en oplossen door het vorige queryplan opnieuw toe te passen. Corrigeer queries die onlangs achteruit zijn gegaan in de prestaties door wijzigingen in het uitvoeringsplan.
- Bepaal hoe vaak een query in een bepaald tijdvenster is uitgevoerd, zodat een DBA kan helpen bij het oplossen van prestatieresourceproblemen.
- Identificeer de belangrijkste n query's (op uitvoeringstijd, geheugenverbruik, enzovoort) in de afgelopen x uur.
- Controleer de geschiedenis van queryplannen voor een bepaalde query.
- Analyseer de gebruikspatronen voor resources (CPU, I/O en geheugen) voor een bepaalde database.
- Identificeer de top n-query's die wachten op middelen.
- Inzicht in de natuur van het wachten voor een bepaalde query of een bepaald plan.
De Query Store bevat drie winkels:
- een planopslag voor het persistent maken van de informatie over het uitvoeringsplan.
- een opslagsysteem voor runtimestatistieken om de informatie over uitvoeringsstatistieken te bewaren.
- een wachtstatistiekenopslag voor het opslaan van informatie over wachtstatistieken.
Het aantal unieke plannen dat kan worden opgeslagen voor een query in de planopslag, wordt beperkt door de max_plans_per_query configureeroptie. Om de prestaties te verbeteren, wordt de informatie asynchroon naar de opslagplaatsen geschreven. Om het gebruik van ruimte te minimaliseren, worden de uitvoeringsstatistieken van runtime in het archief met runtimestatistieken geaggregeerd in een vast tijdvenster. De informatie in deze winkels is zichtbaar door query's uit te voeren op de Query Store-catalogusweergaven.
De volgende query retourneert informatie over query's, hun plannen, het compileren van tijd- en uitvoeringsstatistieken uit de Query Store.
SELECT Txt.query_text_id, Txt.query_sql_text, Pln.plan_id, Qry.*, RtSt.*
FROM sys.query_store_plan AS Pln
INNER JOIN sys.query_store_query AS Qry
ON Pln.query_id = Qry.query_id
INNER JOIN sys.query_store_query_text AS Txt
ON Qry.query_text_id = Txt.query_text_id
INNER JOIN sys.query_store_runtime_stats RtSt
ON Pln.plan_id = RtSt.plan_id;
Query Store voor secundaire replica's
van toepassing op: SQL Server (vanaf SQL Server 2022 (16.x))
De functie Query Store voor secundaire replica's maakt dezelfde Query Store-functionaliteit mogelijk voor secundaire replicaworkloads die beschikbaar zijn voor primaire replica's. Wanneer Query Store voor secundaire replica's is ingeschakeld, verzenden replica's de queryuitvoeringsgegevens die normaal gesproken in de Query Store worden opgeslagen naar de primaire replica. De primaire replica bewaart de gegevens vervolgens op schijf in een eigen Query Store. In wezen is er een gedeelde Query Store tussen de primaire en alle secundaire replica's. De Query Store bestaat op de primaire replica en slaat gegevens op voor alle replica's samen.
Zie Query Store voor Always On- beschikbaarheidsgroep secundaire replica'svoor volledige informatie over Query Store voor secundaire replica's.
De functie Geregresseerde queries gebruiken
Nadat u Query Store hebt ingeschakeld, vernieuwt u het databasegedeelte van het deelvenster Objectverkenner om de sectie Query Store toe te voegen.
Notitie
Voor Azure Synapse Analytics zijn Query Store-weergaven beschikbaar onder Systeemweergaven in het databasegedeelte van het deelvenster Objectverkenner.
Selecteer geregresseerde query's om het deelvenster geregresseerde query's te openen in SQL Server Management Studio. In het deelvenster Geregresseerde query's ziet u de query's en plannen in de Query Store. Gebruik de vervolgkeuzelijsten bovenaan om query's te filteren op basis van verschillende criteria: Duur (ms) (standaard), CPU-tijd (ms), Logische leesbewerkingen (KB), Logische schrijfbewerkingen (KB), Fysieke leesbewerkingen (KB), CLR-tijd (ms), DOP, Geheugenverbruik (KB), Aantal rijen, Gebruikte logboekgeheugen (KB), Tijdelijke DB-geheugengebruik (KB) en wachttijd (ms).
Selecteer een plan om het grafische queryplan weer te geven. Knoppen zijn beschikbaar om de bronquery weer te geven, een queryplan af te dwingen en uit te schakelen, tussen raster- en grafiekindelingen te schakelen, geselecteerde plannen te vergelijken (als er meer dan één is geselecteerd) en de weergave te vernieuwen.
Als u een plan wilt afdwingen, selecteert u een query en een plan en selecteert u vervolgens Het plan afdwingen. U kunt alleen plannen afdwingen die zijn opgeslagen door de functie van het queryplan en die nog steeds worden bewaard in de cache van het queryplan.
Zoek naar wachtende query's
Vanaf SQL Server 2017 (14.x) en Azure SQL Database zijn wachtstatistieken per query in de loop van de tijd beschikbaar in Query Store.
Bij Query Store worden wachttypen gecombineerd in wachtcategorieën. De toewijzing van wachtcategorieën naar wachttypen is beschikbaar in sys.query_store_wait_stats (Transact-SQL).
Selecteer Querywachtstatistieken om het deelvenster Querywachtstatistieken te openen in SQL Server Management Studio 18.0 of latere versies. In het deelvenster Querywachtstatistieken ziet u een staafdiagram met de bovenste wachtcategorieën in de Query Store. Gebruik de vervolgkeuzelijst bovenaan om een statistische criteria te selecteren voor de wachttijd: gemiddeld, max, min, std dev en totaal (standaard).
Selecteer een wachtcategorie door op de balk te klikken en een detailweergave van de geselecteerde wachtcategorie weer te geven. Dit nieuwe staafdiagram bevat de query's die hebben bijgedragen aan die wachtcategorie.
Gebruik de vervolgkeuzelijst bovenaan om query's te filteren op basis van verschillende wachttijdcriteria voor de geselecteerde wachtcategorie: avg, max, min, std dev en totaal (standaard). Selecteer een plan om het grafische queryplan weer te geven. Knoppen zijn beschikbaar om de oorspronkelijke query weer te geven, een queryplan af te dwingen en op te heffen, en de weergave te vernieuwen.
wachtcategorieën combineren verschillende wachttypen in groepen die van nature vergelijkbaar zijn. Voor verschillende wachtcategorieën is een andere follow-upanalyse vereist om het probleem op te lossen, maar wachttypen binnen dezelfde categorie leiden tot vergelijkbare ervaringen bij het oplossen van problemen. Het aanbieden van de betrokken query boven op de wachttijden zou het ontbrekende onderdeel zijn om de meeste van dergelijke onderzoeken succesvol af te ronden.
Hier volgen enkele voorbeelden hoe u meer inzicht krijgt in uw workload voor en na het introduceren van wachtcategorieën in Query Store:
Vorige ervaring | Nieuwe ervaring | Actie |
---|---|---|
Hoge RESOURCE_SEMAPHORE wachttijden per database | Hoge geheugenwachttijden in Query Store voor specifieke query's | Zoek de query's die het meest veel geheugen verbruiken in Query Store. Deze query's vertragen waarschijnlijk verdere voortgang van de betrokken query's. Overweeg het gebruik van MAX_GRANT_PERCENT queryhint voor deze query's of voor de betrokken query's. |
Hoge LCK_M_X wachttijden per database | Lange wachttijden in Query Store voor bepaalde query's | Controleer de queryteksten voor de betrokken query's en identificeer de doelentiteiten. Zoek in Query Store naar andere query's die dezelfde entiteit wijzigen, die regelmatig worden uitgevoerd en/of een hoge duur hebben. Nadat u deze query's hebt geïdentificeerd, kunt u overwegen de toepassingslogica te wijzigen om gelijktijdigheid te verbeteren of een minder beperkend isolatieniveau te gebruiken. |
Hoge PAGEIOLATCH_SH wachttijd per database | Io-wachttijden met hoge buffer in Query Store voor specifieke query's | Zoek de queries met een groot aantal fysieke leesbewerkingen in Query Store. Als ze overeenkomen met de query's met hoge I/O-wachttijden, kunt u overwegen om een index op de onderliggende entiteit in te voeren om te zoeken in plaats van scans, en zo de IO-overhead van de query's te minimaliseren. |
Hoge wachttijden voor SOS_SCHEDULER_YIELD per database | Hoge CPU-wachttijden in Query Store voor specifieke query's | Zoek de meest cpu-verbruikende query's in Query Store. Identificeer onder hen de query's waarvoor een hoge CPU-trend correleert met hoge CPU-wachttijden voor de betrokken query's. Richt u op het optimaliseren van deze query's: er kan een planregressie of een ontbrekende index zijn. |
Configuratieopties
Zie ALTER DATABASE SET options (Transact-SQL)voor de beschikbare opties voor het configureren van Query Store-parameters.
Voer een query uit op de sys.database_query_store_options
weergave om de huidige opties van de Query Store te bepalen. Zie sys.database_query_store_optionsvoor meer informatie over de waarden.
Zie Option Managementvoor voorbeelden van het instellen van configuratieopties met behulp van Transact-SQL instructies.
Notitie
Voor Azure Synapse Analytics kan Query Store worden ingeschakeld, net als op andere platforms, maar aanvullende configuratieopties worden niet ondersteund.
Gerelateerde weergaven, functies en procedures
Query Store weergeven en beheren via Management Studio of met behulp van de volgende weergaven en procedures.
Query Store-functies
Functies helpen bewerkingen met de Query Store.
Catalogusweergaven van Query Store
Catalogusweergaven bevatten informatie over de Query Store.
Opgeslagen procedures van Query Store
Opgeslagen procedures configureren de Query Store.
sp_query_store_consistency_check
(Transact-SQL)1
1 In extreme scenario's kan Query Store een FOUT-status invoeren vanwege interne fouten. Vanaf SQL Server 2017 (14.x), als dit gebeurt, kan Query Store worden hersteld door de sp_query_store_consistency_check
opgeslagen procedure in de betreffende database uit te voeren. Zie sys.database_query_store_options voor meer details zoals beschreven in de actual_state_desc
kolombeschrijving.
Query Store-onderhoud
Best practices en aanbevelingen voor onderhoud en beheer van de Query Store zijn in dit artikel uitgebreid: Best practices voor beheer van de Query Store -.
Prestatiecontrole en probleemoplossing
Voor meer informatie over het afstemmen van prestaties met Query Store, zie Prestaties afstemmen met de Query Store.
Andere prestatieonderwerpen:
Verwante inhoud
- opgeslagen procedures voor Query Store (Transact-SQL)
- Query Store-catalogusweergaven (Transact-SQL)
- sys.database_query_store_options (Transact-SQL)
- Live Query Statistieken
- activiteitsmonitor
- Hoe Query Store gegevens verzamelt
- Prestaties bewaken en afstemmen op
- Tools voor prestatiebewaking en afstemming
- Het gebruik van de Query Store met In-Memory OLTP-
- Aanbevolen procedures voor de Query Store
- Beste praktijken voor het beheren van de Query Store
- Prestaties afstemmen met de Query Store
- Query Store-hints
- Query Store-gebruiksscenario's
- Open Activity Monitor (SQL Server Management Studio)