Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för: SQL Server 2022 (16.x)
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Microsoft Fabric
Den här artikeln beskriver bästa metoder för att använda Query Store-hints. Tips i frågelagret möjliggör att påverka formen på frågeplaner utan att ändra programkod.
- Mer information om hur du konfigurerar och administrerar med Query Store finns i Övervakningsprestanda med hjälp av Query Store-.
- Information om hur du upptäcker användbar information och optimerar prestanda med Query Store finns i Tuning performance by using the Query Store.
- Allmänna metodtips för Query Store finns i Metodtips med Query Store.
Användningsfall för Query Store-tips
Tänk på följande användningsfall som idealiska för Query Store-tips. Mer information finns i När du ska använda Query Store-tips.
Försiktighet
Eftersom SQL Server Query Optimizer vanligtvis väljer den bästa körningsplanen för en fråga rekommenderar vi att du bara använder tips som en sista utväg för erfarna utvecklare och databasadministratörer. Mer information finns i Frågetips.
När koden inte kan ändras
Med hjälp av Query Store-tips kan du påverka körningsplanerna för frågor utan att ändra programkod eller databasobjekt. Ingen annan funktion gör att du snabbt och enkelt kan använda frågetips.
Du kan till exempel använda Query Store-tips för att gynna ETL utan att distribuera om kod. Lär dig hur du förbättrar massladdning med tips för användning av Query Store i den här 14 minuter långa videon.
Query Store-tips är enkla frågejusteringsmetoder, men om en fråga blir problematisk bör den åtgärdas med mer omfattande kodändringar. Om du regelbundet hittar behovet av att tillämpa Query Store-tips på en fråga bör du överväga en större frågeomskrivning. SQL Server Query Optimizer väljer vanligtvis den bästa körningsplanen för en fråga. Vi rekommenderar att du bara använder tips som en sista utväg för erfarna utvecklare och databasadministratörer.
Information om vilka frågetips som kan användas finns i frågetips som stöds.
Under hög transaktionsbelastning eller med verksamhetskritisk kod
Om kodändringar är opraktiska på grund av höga drifttidskrav eller transaktionell belastning kan Query Store-hints snabbt tillämpa frågehints på befintliga frågearbetsbelastningar. Det är enkelt att lägga till och ta bort Query Store-tips.
Query Store-hints kan läggas till och tas bort från frågebatcher för att justera prestandan inom tidsfönster som är anpassade för intensiva perioder av exceptionell arbetsbelastning.
Som ersättning för planguider
Före Query Store-ledtrådar måste en utvecklare förlita sig på planguider för att utföra liknande uppgifter, vilka kan vara komplicerade att använda. Query Store-tips är integrerade med Query Store-funktioner i SQL Server Management Studio (SSMS) för visuell utforskning av frågor.
Med planguider är det nödvändigt att söka igenom alla planer med hjälp av frågefragment. Tipsfunktionen i Query Store kräver inte exakt matchande frågor för att påverka den resulterande frågeplanen. Query Store-hints kan tillämpas på en query_id
i Query Store-datauppsättningen.
Query Store-hints åsidosätter hårdkodade hints på uttalsnivå och befintliga planguider.
Överväg en nyare kompatibilitetsnivå
Query Store-tips kan vara en värdefull metod när en nyare databaskompatibilitetsnivå inte är tillgänglig för dig på grund av leverantörsspecifikation eller större testfördröjningar, till exempel. När en högre kompatibilitetsnivå är tillgänglig för en databas bör du överväga att uppgradera databasens kompatibilitetsnivå för en enskild fråga för att dra nytta av de senaste prestandaoptimeringarna och funktionerna i SQL Server.
Om du till exempel har en SQL Server 2022-instans (16.x) med en databas på kompatibilitetsnivå 140 kan du fortfarande använda Query Store-tips för att köra enskilda frågor på kompatibilitetsnivå 160. Du kan använda följande tips:
EXEC sys.sp_query_store_set_hints @query_id= 39, @query_hints = N'OPTION(USE HINT(''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_160''))';
För en komplett handledning, se Query Store-ledtrådar Exempel.
Överväg en äldre kompatibilitetsnivå efter uppgraderingen
Ett annat fall där Query Store-tips kan hjälpa är när frågor inte kan ändras direkt efter en SQL Server-instansmigrering eller uppgradering. Använd Query Store-tips för att tillämpa en tidigare kompatibilitetsnivå för en fråga tills den kan skrivas om eller på annat sätt åtgärdas för att fungera bra på den senaste kompatibilitetsnivån. Identifiera avvikande frågor som har regresserats med en högre kompatibilitetsnivå med hjälp av query store-rapporten med regresserade frågor, med verktyget Query Tuning Advisor under en migrering eller annan programtelemetri på frågenivå. Mer information om skillnaderna mellan kompatibilitetsnivåer finns i Skillnader mellan kompatibilitetsnivåer.
Efter prestandatestning av den nya kompatibilitetsnivån och distribution av Query Store-tips på det här sättet kan du uppgradera hela databasens kompatibilitetsnivå samtidigt som du behåller viktiga problematiska frågor på den tidigare kompatibilitetsnivån, utan några kodändringar.
Blockera framtida körning av problematiska sökfrågor
Du kan använda frågetipset ABORT_QUERY_EXECUTION
för att blockera framtida körning av kända problematiska frågor, till exempel icke-nödvändiga frågor som orsakar hög resursförbrukning och påverkar kritiska programarbetsbelastningar.
Anmärkning
För närvarande är frågetipset ABORT_QUERY_EXECUTION (förhandsversion) endast tillgängligt i Azure SQL Database.
Om du till exempel vill blockera framtida körning av query_id
39 kör du följande instruktion:
EXEC sys.sp_query_store_set_hints
@query_id = 39,
@query_hints = N'OPTION (USE HINT (''ABORT_QUERY_EXECUTION''))';
Mer information finns i Tipsexempel för Query Store.
Följande gäller:
- När du anger det här tipset för en fråga misslyckas ett försök att köra frågan med fel 8778, allvarlighetsgrad 16, Frågekörningen har avbrutits eftersom ABORT_QUERY_EXECUTION tips angavs.
- Om du vill avblockera en fråga kan du rensa tipset genom att skicka
query_id
värdet till den sys.sp_query_store_clear_hints lagrade proceduren. - Du kan använda följande exempelfråga för att hitta alla frågor i Query Store som blockeras med systemvyer, från och med systemvyn sys.query_store_query_hints (Transact-SQL) :
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%'
- För att hämta värdet
query_id
måste minst en frågekörning registreras i Query Store. Den här körningen behöver inte lyckas. Det innebär att framtida genomförandet av tidsbegränsade eller avbrutna frågor kan blockeras. - Om en frågeställning redan körs vid tidpunkten när du blockerar den, fortsätter dess körning. Du kan använda KILL-instruktionen för att avbryta frågan.
- Stoppade frågor registreras inte i Query Store. Om frågan ännu inte finns i Query Store måste du låta frågan slutföras eller överskrida tidsgränsen för att få en
query_id
som du kan blockera.
- Stoppade frågor registreras inte i Query Store. Om frågan ännu inte finns i Query Store måste du låta frågan slutföras eller överskrida tidsgränsen för att få en
- När en fråga blockeras av tipset
ABORT_QUERY_EXECUTION
anges kolumnernaexecution_type
ochexecution_type_desc
i vyn sys.query_store_runtime_stats till 4 respektive Undantag . - Precis som med alla Query Store-tips måste du ha behörighet till
ALTER
databasen för att ange och rensa tipsetABORT_QUERY_EXECUTION
.
Överväganden kring ledtrådar i Query Store
Tänk på följande scenarier när du distribuerar Query Store-tips.
Datadistributionändringar
Planguider, framtvingade planer via Query Store och Query Store-tips åsidosätter optimerarens beslutsfattande. Query Store-tipset kan vara fördelaktigt nu, men inte i framtiden. Om ett Query Store-tips till exempel hjälper en fråga i tidigare datadistribution kan det vara kontraproduktivt om storskaliga DML-åtgärder ändrar data. En ny datadistribution kan göra att optimeraren fattar ett bättre beslut än tipset. Det här scenariot är den vanligaste konsekvensen av att tvinga fram ett planenligt beteende.
Utvärdera regelbundet din strategi för tips i Query Store
Utvärdera din befintliga strategi för tips i Query Store i följande fall:
- Efter kända stora datadistributionsändringar.
- När resurserna som är tillgängliga för databasen ändras. Till exempel när beräkningsstorleken för din virtuella Azure SQL Database-, SQL Managed Instance- eller SQL Server-dator ändras.
- Där planfixeringen har blivit långlivad. Query Store-tips används bäst för kortsiktiga korrigeringar.
- Oväntade prestandaregressioner.
Bred påverkanspotential
Query Store-hintar påverkar alla körningar av frågan, oavsett parameteruppsättning, källprogram, användare eller resultat. Vid oavsiktlig prestandaregression kan Query Store-tips som skapats med sys.sp_query_store_set_hints enkelt raderas med sys.sp_query_store_clear_hints.
Genomför noggranna belastningstester för verksamhetskritiska eller känsliga system innan du använder Query Store-hints i produktion.
Tvingad parameterisering och RECOMPILE-tips stöds inte
Det går inte att använda frågetipset RECOMPILE
med Query Store-tips när databasalternativet PARAMETERIZATION är inställt på FORCED. Mer information finns i Riktlinjer för användning av tvingad parameterisering.
Tipset RECOMPILE
är inte kompatibelt med tvingad parameterisering som angetts på databasnivå. Om databasen använder tvingad parameterisering och tipset RECOMPILE
är en del av tipssträngen som angetts i Query Store för en fråga ignorerar databasmotorn tipset RECOMPILE
och tillämpar andra tips om det anges. Från och med juli 2022 i Azure SQL Database utfärdas dessutom en varning (felkod 12461) som anger att tipset RECOMPILE
ignorerades.
Information om vilka frågetips som kan användas finns i frågetips som stöds.