Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op: SQL Server 2022 (16.x)
Azure SQL Database
Azure SQL Managed Instance
SQL-database in Microsoft Fabric
In dit artikel worden aanbevolen procedures beschreven voor het gebruik van Query Store-hints. Query Store-hints maken het vormgeven van shapes voor queryplannen mogelijk zonder toepassingscode te wijzigen.
- Zie Prestaties bewaken met behulp van de Query Store-voor meer informatie over het configureren en beheren met de Query Store.
- Zie Prestaties afstemmen met behulp van de Query Store-voor informatie over het detecteren van bruikbare informatie en het afstemmen van prestaties met de Query Store.
- Zie Best practices voor Query Store voor algemene aanbevolen procedures voor Query Store.
Gebruiksvoorbeelden voor Query Store-hints
Houd rekening met de volgende gebruiksvoorbeelden als ideaal voor Query Store-hints. Zie Wanneer query store-hintsworden gebruikt voor meer informatie.
Voorzichtigheid
Omdat sql Server Query Optimizer doorgaans het beste uitvoeringsplan voor een query selecteert, raden we u aan alleen hints te gebruiken als laatste redmiddel voor ervaren ontwikkelaars en databasebeheerders. Zie queryhintsvoor meer informatie.
Wanneer code niet kan worden gewijzigd
Met behulp van Query Store-hints kunt u de uitvoeringsplannen van query's beïnvloeden zonder toepassingscode of databaseobjecten te wijzigen. Met geen andere functie kunt u snel en eenvoudig queryhints toepassen.
U kunt query store-hints gebruiken, bijvoorbeeld om ETL te gebruiken zonder code opnieuw te implementeren. Leer hoe u bulksgewijs laden kunt verbeteren met Query Store-hints met deze video van 14 minuten:
Query Store-hints zijn eenvoudige methoden voor het afstemmen van query's, maar als een query problematisch wordt, moet deze worden aangepakt met aanzienlijke codewijzigingen. Als u regelmatig de noodzaak vindt om Query Store-hints toe te passen op een query, kunt u overwegen om een grotere query opnieuw te schrijven. De SQL Server Query Optimizer selecteert doorgaans het beste uitvoeringsplan voor een query. We raden u aan alleen hints te gebruiken als laatste redmiddel voor ervaren ontwikkelaars en databasebeheerders.
Zie Ondersteunde queryhintsvoor informatie over welke queryhints kunnen worden toegepast.
Onder hoge transactiebelasting of met bedrijfskritieke code
Als codewijzigingen niet praktisch zijn vanwege hoge uptimevereisten of transactionele belasting, kunnen Query Store-hints snel queryhints toepassen op bestaande queryworkloads. Het toevoegen en verwijderen van Query Store-hints is eenvoudig.
Query Store-hints kunnen worden toegevoegd aan en verwijderd uit batches query's om de prestaties aan te passen voor vensters die zijn getimed voor bursts van uitzonderlijke werkbelasting.
Als vervanging voor planhandleidingen
Voorafgaand aan Query Store-hints zou een ontwikkelaar moeten vertrouwen op planhandleidingen om vergelijkbare taken uit te voeren, wat complex kan zijn voor gebruik. Query Store-hints zijn geïntegreerd met Query Store-functies van SQL Server Management Studio (SSMS) voor visuele verkenning van query's.
Met planhandleidingen is het doorzoeken van alle plannen met behulp van queryfragmenten nodig. De functie Query Store-hints vereist niet dat exact overeenkomende query's van invloed zijn op het resulterende queryplan. Query Store-hints kunnen worden toegepast op een query_id
in de Query Store-gegevensset.
Aanwijzingen voor Query Store hebben voorrang boven hardgecodeerde aanwijzingen op instructieniveau en bestaande plangidsen.
Overweeg een hoger compatibiliteitsniveau
Query Store-hints kunnen een waardevolle methode zijn wanneer een nieuwer databasecompatibiliteitsniveau bijvoorbeeld niet beschikbaar is vanwege de specificatie van de leverancier of grotere testvertragingen. Wanneer een hoger compatibiliteitsniveau beschikbaar is voor een database, kunt u overwegen het databasecompatibiliteitsniveau van een afzonderlijke query te upgraden om te profiteren van de nieuwste prestatieoptimalisaties en -functies van SQL Server.
Als u bijvoorbeeld een EXEMPLAAR van SQL Server 2022 (16.x) hebt met een database in compatibiliteitsniveau 140, kunt u nog steeds Query Store-hints gebruiken om afzonderlijke query's uit te voeren in compatibiliteitsniveau 160. U kunt de volgende hint gebruiken:
EXEC sys.sp_query_store_set_hints @query_id= 39, @query_hints = N'OPTION(USE HINT(''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_160''))';
Zie Query Store hints-voorbeeldenvoor een complete zelfstudie.
Overweeg een ouder compatibiliteitsniveau na de upgrade
Een ander geval waarin Query Store-hints kunnen helpen, is waar query's niet rechtstreeks kunnen worden gewijzigd na een migratie of upgrade van een SQL Server-exemplaar. Gebruik Query Store-hints om een eerder compatibiliteitsniveau voor een query toe te passen totdat deze kan worden herschreven of op een andere manier worden aangepakt om goed te presteren in het meest recente compatibiliteitsniveau. Identificeer uitbijterquery's die zijn teruggedraaid met een hoger compatibiliteitsniveau met behulp van het rapport met teruggedraaide query's van Query Store, met behulp van het hulpprogramma Query Tuning Advisor tijdens een migratie of andere telemetrie van toepassingen op queryniveau. Raadpleeg de Verschillen tussen compatibiliteitsniveausvoor meer informatie over de verschillen tussen compatibiliteitsniveaus.
Nadat de prestaties het nieuwe compatibiliteitsniveau hebben getest en Query Store-hints op deze manier hebben geïmplementeerd, kunt u het compatibiliteitsniveau van de hele database upgraden terwijl belangrijke problematische query's op het voorgaande compatibiliteitsniveau worden bewaard, zonder dat er codewijzigingen zijn.
Toekomstige uitvoering van problematische query's blokkeren
U kunt de ABORT_QUERY_EXECUTION
queryhint gebruiken om toekomstige uitvoering van bekende problematische query's te blokkeren, bijvoorbeeld niet-essentiële query's die een hoog resourceverbruik veroorzaken en van invloed zijn op kritieke toepassingsworkloads.
Opmerking
Op dit moment is de ABORT_QUERY_EXECUTION (preview)-queryhint alleen beschikbaar in Azure SQL Database.
Als u bijvoorbeeld toekomstige uitvoering van query_id
39 wilt blokkeren, voert u de volgende instructie uit:
EXEC sys.sp_query_store_set_hints
@query_id = 39,
@query_hints = N'OPTION (USE HINT (''ABORT_QUERY_EXECUTION''))';
Zie voorbeelden van hints voor Query Store voor meer informatie.
De volgende overwegingen zijn van toepassing:
- Wanneer u deze hint voor een query opgeeft, mislukt de poging om de query uit te voeren met fout 8778, ernstniveau 16. De queryuitvoering is afgebroken omdat de ABORT_QUERY_EXECUTION hint is opgegeven.
- Als u een query wilt deblokkeren, kunt u de hint wissen door de
query_id
waarde door te geven aan de@query_id
parameter in de sys.sp_query_store_clear_hints opgeslagen procedure. - U kunt systeemweergaven gebruiken om query's te vinden in Query Store die zijn geblokkeerd, zoals in de volgende voorbeeldquery:
SELECT qsh.query_id, q.query_hash, qt.query_sql_text FROM sys.query_store_query_hints AS qsh INNER JOIN sys.query_store_query AS q ON qsh.query_id = q.query_id INNER JOIN sys.query_store_query_text AS qt ON q.query_text_id = qt.query_text_id WHERE UPPER(qsh.query_hint_text) LIKE '%ABORT[_]QUERY[_]EXECUTION%'
- Als u de
query_id
waarde wilt ophalen, moet ten minste één query worden uitgevoerd in Query Store. Deze uitvoering hoeft niet succesvol te zijn. Dit betekent dat de uitvoering van vertraagde of geannuleerde query's in de toekomst kan worden geblokkeerd. - Als een query al wordt uitgevoerd wanneer u deze blokkeert, wordt de uitvoering voortgezet. U kunt de KILL-instructie gebruiken om de query af te breken.
- De uitvoering van afgebroken query's wordt niet vastgelegd in Query Store. Als de query zich nog niet in Query Store bevindt, moet u de query voltooien of een time-out uitvoeren om een
query_id
query te krijgen die u kunt blokkeren.
- De uitvoering van afgebroken query's wordt niet vastgelegd in Query Store. Als de query zich nog niet in Query Store bevindt, moet u de query voltooien of een time-out uitvoeren om een
- Wanneer een query wordt geblokkeerd door de
ABORT_QUERY_EXECUTION
hint, worden deexecution_type
kolommenexecution_type_desc
in de sys.query_store_runtime_stats weergave ingesteld op respectievelijk 4 en Uitzondering . - Net als bij alle Query Store-hints moet u over de
ALTER
machtiging voor de database beschikken om deABORT_QUERY_EXECUTION
hint in te stellen en te wissen.
Aandachtspunten voor Query Store-hints
Houd rekening met de volgende scenario's bij het implementeren van Query Store-hints.
Wijzigingen in gegevensdistributie
Planhandleidingen, geforceerde plannen via de Query Store- en Query Store-hints overschrijven de besluitvorming van de optimizer. De Query Store-hint kan nu nuttig zijn, maar niet in de toekomst. Als een Query Store-hint bijvoorbeeld helpt bij het uitvoeren van een query in eerdere gegevensdistributie, kan dit contraproductief zijn als grootschalige DML-bewerkingen de gegevens wijzigen. Een nieuwe gegevensdistributie kan ertoe leiden dat de optimalisatie een betere beslissing neemt dan de hint. Dit scenario is het meest voorkomende gevolg van het afdwingen van plangedrag.
Uw query store-hintsstrategie regelmatig opnieuw evalueren
Evalueer uw bestaande strategie voor Query Store-hints opnieuw in de volgende gevallen:
- Na bekende wijzigingen in grote gegevensdistributie.
- Wanneer de resources die beschikbaar zijn voor de database, worden gewijzigd. Bijvoorbeeld wanneer de rekenkracht van uw Azure SQL Database, SQL Managed Instance of de virtuele SQL Server-machine wordt gewijzigd.
- Waar het vaststellen van plannen duurzaam is geworden. Query Store-hints kunnen het beste worden gebruikt voor oplossingen op korte termijn.
- Onverwachte vermindering in prestaties.
Groot potentieel voor impact
Query Store-hints zijn van invloed op alle uitvoeringen van de query, ongeacht de parameterset, de brontoepassing, de gebruiker of de resultatenset. In het geval van per ongeluk prestatieregressie kunnen Query Store-hints die zijn gemaakt met sys.sp_query_store_set_hints eenvoudig worden verwijderd met sys.sp_query_store_clear_hints.
Laad wijzigingen zorgvuldig in een testomgeving voor essentiële of gevoelige systemen voordat u Query Store-hints in de productie toepast.
Geforceerde parameterisatie en de hint RECOMPILE worden niet ondersteund
Het toepassen van de RECOMPILE
queryhint met Query Store-hints wordt niet ondersteund wanneer de parameterisatie van de databaseoptie is ingesteld op GEFORCEERD. Zie Richtlijnen voor het gebruik van geforceerde parametersvoor meer informatie.
De RECOMPILE
hint is niet compatibel met geforceerde parameters die zijn ingesteld op databaseniveau. Als de database geforceerde parameterisatie gebruikt en de RECOMPILE
hint deel uitmaakt van de hintsreeks die is ingesteld in Query Store voor een query, negeert de database-engine de RECOMPILE
hint en past de andere hints toe indien opgegeven. Bovendien wordt vanaf juli 2022 in Azure SQL Database een waarschuwing (foutcode 12461) uitgegeven met de mededeling dat de RECOMPILE
hint is genegeerd.
Zie Ondersteunde queryhintsvoor informatie over welke queryhints kunnen worden toegepast.