Metodtips för att hantera Query Store
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Den här artikeln beskriver hanteringen av SQL Server Query Store och de omgivande funktionerna.
- Mer information om hur du konfigurerar och administrerar med Query Store finns i Övervakningsprestanda med hjälp av Query Store-.
Note
I SQL Server 2022 (16.x) är Query Store nu aktiverat som standard för alla nyligen skapade SQL Server-databaser för att bättre spåra prestandahistorik, felsöka problem med frågeplan och aktivera nya funktioner för frågeprocessorer.
Query Store-standardvärden i Azure SQL Database
I det här avsnittet beskrivs optimala konfigurationsstandarder i Azure SQL Database som är utformade för att säkerställa tillförlitlig drift av Query Store och beroende funktioner. Standardkonfigurationen är optimerad för kontinuerlig datainsamling, vilket är minimal tid i OFF/READ_ONLY tillstånd. För mer information om alla tillgängliga alternativ för Query Store, se ALTER DATABASE SET-alternativ (Transact-SQL).
Konfiguration | Beskrivning | Förvald | Kommentar |
---|---|---|---|
MAX_STORAGE_SIZE_MB | Anger gränsen för det datautrymme som Query Store kan ta i kunddatabasen | 100 före SQL Server 2019 (15.x) 1000 börjar med SQL Server 2019 (15.x) |
Tillämpas för nya databaser |
INTERVALL_LÄNGD_MINUTER | Definierar storleken på tidsfönstret under vilket insamlad körningsstatistik för frågeplaner aggregeras och sparas. Varje aktiv frågeplan har högst en rad under en tidsperiod som definierats med den här konfigurationen | 60 | Tillämpas för nya databaser |
STALE_QUERY_THRESHOLD_DAYS | Tidsbaserad policy för borttagning som garanterar kvarhållningsperioden för lagrad körningsstatistik och inaktiva frågor | 30 | Verkställs för nya databaser och databaser med tidigare standardinställning (367) |
STORLEKSBASERAT_RENGÖRINGSLÄGE | Anger om automatisk rensning av data sker när datastorleken för Query Store närmar sig gränsen | BIL | Tillämpas för alla databaser |
QUERY_CAPTURE_MODE | Anger om alla frågor eller endast en delmängd frågor spåras | BIL | Tillämpas för alla databaser |
DATA_FLUSH_INTERVAL_SECONDS | Anger den maximala period under vilken samlad körningsstatistik sparas i minnet innan den rensas till disk | 900 | Tillämpas för nya databaser |
Viktig
Dessa standardvärden tillämpas automatiskt i den sista fasen av Query Store-aktiveringen i en Azure SQL Database. När den är aktiverad ändrar Azure SQL Database inte konfigurationsvärden som anges av kunder, såvida de inte påverkar den primära arbetsbelastningen eller tillförlitliga åtgärder i Query Store negativt.
Not
Det går inte att inaktivera Query Store i en enskild Azure SQL Database-databas och elastisk pool. Om du kör ALTER DATABASE [database] SET QUERY_STORE = OFF
returneras varningen 'QUERY_STORE=OFF' is not supported in this version of SQL Server.
Om du vill behålla dina anpassade inställningar använder du ALTER DATABASE med query store-alternativ för att återställa konfigurationen till föregående tillstånd. Kolla in bästa praxis med Query Store- för att lära dig hur du väljer optimala konfigurationsparametrar.
Ange det optimala insamlingsläget för Query Store
Behåll de mest relevanta data i Query Store. I följande tabell beskrivs typiska scenarier för varje frågelagrings insamlingsläge.
Query Store fångstläge | Scenarie |
---|---|
Alla | Analysera arbetsbelastningen noggrant när det gäller alla frågor, deras frekvenser och annan statistik. Identifiera nya frågor i din arbetsbelastning. Identifiera om ad hoc-frågor används för att identifiera möjligheter för användare eller automatisk parameterisering. Obs! Det här är standardläget för avbildning i SQL Server 2016 (13.x) och SQL Server 2017 (14.x). |
automatisk | Fokusera din uppmärksamhet på relevanta och användbara frågor. Ett exempel är de frågor som körs regelbundet eller som har betydande resursförbrukning. Obs! I SQL Server 2019 (15.x) och senare versioner är detta standardläget för avbildning. |
Ingen | Du har redan samlat in den frågeuppsättning som du vill övervaka under exekveringstid och vill eliminera de distraktioner som andra frågeuppsättningar kan introducera. Ingen är lämplig för test- och benchmarkingmiljöer. Ingen är också lämplig för programvaruleverantörer som levererar Query Store-konfiguration som konfigurerats för att övervaka deras programarbetsbelastning. Ingen bör användas med försiktighet eftersom du kanske missar möjligheten att spåra och optimera viktiga nya frågor. Undvik att använda None om du inte har ett specifikt scenario som kräver det. |
Anpassad | SQL Server 2019 (15.x) introducerade ett anpassat avbildningsläge under kommandot ALTER DATABASE ... SET QUERY_STORE . Även om Auto är standard och rekommenderas, kan databasadministratörer använda anpassade insamlingsprinciper för att ytterligare finjustera insamlingsbeteendet för Query Store om det fortfarande finns några bekymmer över de omkostnader Query Store kan orsaka. Mer information och rekommendationer finns i Anpassade principer för avbildning senare i den här artikeln. Mer information om den här syntaxen finns i ALTER DATABASE SET Options. |
Anteckning
Markörer, frågeställningar i lagrade procedurer och nativt kompilerade frågeställningar registreras alltid när avbildningsläget för Frågelager är inställt på Alla, Autoeller Anpassad. Om du vill samla in inbyggda kompilerade frågor aktiverar du insamling av statistik per fråga med hjälp av sys.sp_xtp_control_query_exec_stats.
Behåll de mest relevanta data i Query Store
Konfigurera Query Store så att de endast innehåller relevanta data så att de körs kontinuerligt och ger en bra felsökningsupplevelse med minimal påverkan på din vanliga arbetsbelastning.
Följande tabell innehåller metodtips:
Bästa praxis | Inställning |
---|---|
Begränsa behållna historiska data. | Konfigurera tidsbaserad policy för att aktivera automatisk rengöring. |
Filtrera bort icke-relevanta frågor. | Konfigurera inspelningsläge för frågearkivet till Auto-läge. |
Ta bort mindre relevanta frågor när den maximala storleken har nåtts. | Aktivera storleksbaserad rensningspolicy. |
Anpassade inspelningsprinciper
När CUSTOM Query Store-fångstläge är aktiverat är ytterligare konfigurationer för Query Store tillgängliga under en ny fångstprincip för Query Store för att finjustera datainsamling på en viss server.
De nya anpassade inställningarna definierar vad som händer under tidströskelvärdet för den interna inspelningspolicyn. Det här är en tidsgräns under vilken de konfigurerbara villkoren utvärderas och om några är sanna är frågan berättigad att registreras av Query Store.
Inspelningsläge för Query Store anger insamlingsprincipen för frågor i Query Store.
- Alla: Samlar in alla frågor. Det här alternativet är standardinställningen i SQL Server 2016 (13.x) och SQL Server 2017 (14.x).
- Auto: Sällsynta förfrågningar och förfrågningar med obetydlig kompileringstid och exekveringstid ignoreras. Tröskelvärden för antal körningar, kompileringsprocess och körtidsvaraktighet bestäms internt. Från och med SQL Server 2019 (15.x) är det här standardalternativet.
- None: Query Store slutar samla in nya frågor.
- Anpassad: Tillåter ytterligare kontroll och möjlighet att finjustera datainsamlingsprincipen. De nya anpassade inställningarna definierar vad som sker vid den interna fångstpolicyts tidsgräns. Det här är en tidsgräns under vilken de konfigurerbara villkoren utvärderas och om några är sanna är frågan berättigad att registreras av Query Store.
Du bör överväga att justera en lämplig anpassad insamlingspolicy för din miljö när:
- Databasen är mycket stor.
- Databasen har ett stort antal unika ad hoc-frågor.
- Databasen har specifika storleks- eller tillväxtbegränsningar.
Ladda ned den senaste versionen av SQL Server Management Studio (SSMS)
Så här visar du aktuella inställningar i Management Studio:
- Högerklicka på databasen i SQL Server Management Studio Object Explorer.
- Välj Egenskaper.
- Välj Query Store. På sidan Query Store kontrollerar du att åtgärdsläge (begärt) är lässkrivning.
- Ändra inspelningsläge för Query Store till anpassad.
- Observera att de fyra avbildningsprincipfälten under Query Store Capture Policy nu är aktiverade och konfigurerbara.
Exempel på anpassade avbildningsprinciper
I följande exempel anges QUERY_CAPTURE_MODE till AUTO och ett anpassat avbildningsläge anges. Var och en av följande ställer in de anpassade fångstprinciperna till standardvärdet i SQL Server 2022 (16.x). Överväg att justera dessa värden för att minska antalet frågor som samlas in och därmed minska fotavtrycket på disken i Query Store. Vi rekommenderar att du gradvis ändrar dessa värden med små steg.
ALTER DATABASE [QueryStoreDB]
SET QUERY_STORE = ON
(
OPERATION_MODE = READ_WRITE,
CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = 90 ),
DATA_FLUSH_INTERVAL_SECONDS = 900,
MAX_STORAGE_SIZE_MB = 1000,
INTERVAL_LENGTH_MINUTES = 60,
SIZE_BASED_CLEANUP_MODE = AUTO,
QUERY_CAPTURE_MODE = CUSTOM,
QUERY_CAPTURE_POLICY = (
STALE_CAPTURE_POLICY_THRESHOLD = 24 HOURS,
EXECUTION_COUNT = 30,
TOTAL_COMPILE_CPU_TIME_MS = 1000,
TOTAL_EXECUTION_CPU_TIME_MS = 100
)
);
Följande exempelfråga ändrar ett befintligt Query Store för att använda en anpassad avbildningsprincip som åsidosätter standardinställningarna för EXECUTION_COUNT
och TOTAL_COMPILE_CPU_TIME_MS
.
ALTER DATABASE [QueryStoreDB]
SET QUERY_STORE = ON
(
QUERY_CAPTURE_MODE = CUSTOM,
QUERY_CAPTURE_POLICY = (
EXECUTION_COUNT = 100,
TOTAL_COMPILE_CPU_TIME_MS = 10000
)
);
Maximal storlek för Query Store
Standardvärdet för maximal storlek för Query Store är 1 000 MB, med början i SQL Server 2019 (15.x). I tidigare versioner var standardvärdet 100 MB. Det är lämpligt att öka den maximala storleksgränsen för Query Store i en upptagen databas med många unika frågeplaner. Det är viktigare att justera avbildningsprincipen (se föregående avsnitt) för att begränsa diskstorleken för Query Store och förhindra att Query Store går in i READ_ONLY läge. Medan Query Store samlar in frågor, körningsplaner och statistik växer dess storlek i databasen tills den här gränsen har nåtts. När det händer ändrar Query Store automatiskt åtgärdsläget till READ_ONLY och slutar samla in nya data, vilket innebär att prestandaanalysen inte längre är korrekt.
- I SQL Server och Azure SQL Managed Instance tillämpas inte
MAX_STORAGE_SIZE_MB
gräns strikt. - I Azure SQL Database är det högsta tillåtna
MAX_STORAGE_SIZE_MB
värdet 10 240 MB.
Lagringsstorleken kontrolleras endast när Query Store skriver data till disk. Det här intervallet anges av alternativet DATA_FLUSH_INTERVAL_SECONDS
eller alternativet Data Flush Intervali dialogrutan Management Studio Query Store.
- Standardvärdet för intervallet är 900 sekunder (eller 15 minuter).
- Om Query Store har överskridit gränsen för
MAX_STORAGE_SIZE_MB
mellan kontroller av lagringsstorlek övergår den till endast läsbart läge. - Om
SIZE_BASED_CLEANUP_MODE
är aktiverat utlöses även rensningsmekanismen för att framtvinga gränsen förMAX_STORAGE_SIZE_MB
.- När tillräckligt med utrymme har rensats växlar Query Store-läget automatiskt tillbaka till READ_WRITE läge.
Mer information finns i ALTER DATABASE SET OPTION MAX_STORAGE_SIZE_MB.
Dataspolningsintervall (minuter)
Dataspolningsintervallet definierar frekvensen innan insamlad körningsstatistik sparas på disken. I SQL Server Management Studio är värdet i minuter, men i Transact-SQL uttrycks det i sekunder. Standardvärdet är 15 minuter (900 sekunder).
- Om du ökar dataspolningsintervallet kan du minska den totala I/O-påverkan för Query Store-lagringen, men göra att lagrings-I/O-arbetsbelastningen blir mer spikig, med färre men tyngre effekter på diskanvändningen. Överväg att använda ett högre värde om din arbetsbelastning inte genererar ett stort antal olika frågor och planer, eller om du kan motstå längre tid för att spara data före en databasavstängning.
- Om du minskar dataspolningsintervallet minskar mängden Query Store-data som skulle gå förlorade i händelse av avstängning, strömavbrott eller redundansväxling. Det kan också jämna ut lagrings-I/O-påverkan från Query Store genom att skriva till disk oftare, men med mindre data.
Obs
Med hjälp av spårningsflagga 7745 förhindras att Query Store-data skrivs till disk i händelse av ett redundans- eller avstängningskommando. Mer information finns i Använd Query Store på verksamhetskritiska servrar.
Ändra standardvärden för Query Store
Konfigurera Query Store baserat på dina krav på arbetsbelastning och prestandafelsökning. Standardparametrarna är tillräckligt bra för att starta, men du bör övervaka hur Query Store fungerar över tid och justera dess konfiguration i enlighet med detta.
Visa aktuella inställningar för Query Store
Visa de aktuella Query Store-inställningarna i SQL Server Management Studio (SSMS) eller T-SQL.
Ladda ned den senaste versionen av SQL Server Management Studio (SSMS)
Så här visar du aktuella inställningar i Management Studio:
- Högerklicka på databasen i SQL Server Management Studio Object Explorer.
- Välj Egenskaper.
- Välj Query Store.
Följande skript anger ett nytt värde för maxstorlek (MB):
ALTER DATABASE [QueryStoreDB]
SET QUERY_STORE (MAX_STORAGE_SIZE_MB = 1024);
Använd SQL Server Management Studio eller Transact-SQL för att ange ett annat värde för dataspolningsintervall:
ALTER DATABASE [QueryStoreDB]
SET QUERY_STORE (DATA_FLUSH_INTERVAL_SECONDS = 900);
Statistics Collection Interval: Definierar detaljnivån för den insamlade körningsstatistiken uttryckt i minuter. Standardvärdet är 60 minuter. Överväg att använda ett lägre värde om du behöver finare kornighet eller mindre tid för att identifiera och åtgärda problem. Tänk på att värdet direkt påverkar storleken på Query Store-data. Använd SQL Server Management Studio eller Transact-SQL för att ange ett annat värde för :
ALTER DATABASE [QueryStoreDB]
SET QUERY_STORE (INTERVAL_LENGTH_MINUTES = 60);
Gränsvärde för inaktiva frågor (dagar): Tidsbaserad rensningspolicy som styr kvarhållningsperioden för beständiga körningsstatistik och inaktiva frågor, uttryckt i dagar. Som standard är Query Store konfigurerat för att behålla data i 30 dagar, vilket kan vara onödigt långt för ditt scenario.
Undvik att behålla historiska data som du inte planerar att använda. Den här metoden minskar ändringar i skrivskyddad status. Storleken på Query Store-data och tiden för att identifiera och åtgärda problemet blir mer förutsägbar. Använd Management Studio eller följande skript för att konfigurera tidsbaserad rensningsprincip:
ALTER DATABASE [QueryStoreDB]
SET QUERY_STORE (CLEANUP_POLICY = (STALE_QUERY_THRESHOLD_DAYS = 90));
storleksbaserat rensningsläge: Anger om automatisk rensning av data sker när Datastorleken för Query Store närmar sig gränsen. Aktivera storleksbaserad rensning för att se till att Query Store alltid körs i läs- och skrivläge och samlar in de senaste data. Det finns ingen garanti under tunga arbetsbelastningar att rensningen av Query Store konsekvent behåller datastorleken under gränsen. Det är möjligt att den automatiska rensningen av data hamnar efter och att den (tillfälligt) växlar till skrivskyddat läge.
ALTER DATABASE [QueryStoreDB]
SET QUERY_STORE (SIZE_BASED_CLEANUP_MODE = AUTO);
Avbildningsläge för frågelager: Anger frågeinsamlingspolicyn för Query Store.
- Alla: Samlar in alla frågor. Det här alternativet är standardinställningen i SQL Server 2016 (13.x) och SQL Server 2017 (14.x).
- Auto: Sällan förekommande frågor och frågor vars sammanställnings- och exekveringstid är obetydlig ignoreras. Tröskelvärden för exekveringsantal, kompilering och körtid bestäms internt. Från och med SQL Server 2019 (15.x) är det här standardalternativet.
- None: Query Store slutar samla in nya frågor.
- Anpassad: Tillåter ytterligare kontroll och möjlighet att finjustera datainsamlingsprincipen. De nya anpassade inställningarna definierar vad som händer under tidsgränsen för den interna policy för datafångst. Det här är en tidsgräns under vilken de konfigurerbara villkoren utvärderas och om några är sanna är frågan berättigad att registreras av Query Store.
Viktig
Markörer, frågor i lagrade procedurer och inbyggda kompilerade frågor registreras alltid när avbildningsläget för Frågearkiv är inställt på Alla, Autoeller Anpassad. Om du vill samla in inbyggda kompilerade frågor aktiverar du insamling av statistik per fråga med hjälp av sys.sp_xtp_control_query_exec_stats.
Följande skript anger QUERY_CAPTURE_MODE till AUTO:
ALTER DATABASE [QueryStoreDB]
SET QUERY_STORE (QUERY_CAPTURE_MODE = AUTO);
Exempel
I följande exempel anges QUERY_CAPTURE_MODE till AUTO och andra rekommenderade alternativ anges i SQL Server 2016 (13.x):
ALTER DATABASE [QueryStoreDB]
SET QUERY_STORE = ON
(
OPERATION_MODE = READ_WRITE,
CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = 90 ),
DATA_FLUSH_INTERVAL_SECONDS = 900,
QUERY_CAPTURE_MODE = AUTO,
MAX_STORAGE_SIZE_MB = 1000,
INTERVAL_LENGTH_MINUTES = 60
);
I följande exempel anges QUERY_CAPTURE_MODE till AUTO och andra rekommenderade alternativ anges i SQL Server 2017 (14.x) för att inkludera väntestatistik:
ALTER DATABASE [QueryStoreDB]
SET QUERY_STORE = ON
(
OPERATION_MODE = READ_WRITE,
CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = 90 ),
DATA_FLUSH_INTERVAL_SECONDS = 900,
QUERY_CAPTURE_MODE = AUTO,
MAX_STORAGE_SIZE_MB = 1000,
INTERVAL_LENGTH_MINUTES = 60,
SIZE_BASED_CLEANUP_MODE = AUTO,
MAX_PLANS_PER_QUERY = 200,
WAIT_STATS_CAPTURE_MODE = ON
);
I följande exempel anges custom capture-principen till standardinställningarna för SQL Server 2019 (15.x), i stället för det nya standardläget för automatisk avbildning. Mer information om alternativ och standardinställningar för anpassad avbildning finns i <query_capture_policy_option_list>.
ALTER DATABASE [QueryStoreDB]
SET QUERY_STORE = ON
(
OPERATION_MODE = READ_WRITE,
CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = 90 ),
DATA_FLUSH_INTERVAL_SECONDS = 900,
MAX_STORAGE_SIZE_MB = 1000,
INTERVAL_LENGTH_MINUTES = 60,
SIZE_BASED_CLEANUP_MODE = AUTO,
MAX_PLANS_PER_QUERY = 200,
WAIT_STATS_CAPTURE_MODE = ON,
QUERY_CAPTURE_MODE = CUSTOM,
QUERY_CAPTURE_POLICY = (
STALE_CAPTURE_POLICY_THRESHOLD = 24 HOURS,
EXECUTION_COUNT = 30,
TOTAL_COMPILE_CPU_TIME_MS = 1000,
TOTAL_EXECUTION_CPU_TIME_MS = 100
)
);
Underhåll av Query Store
Det här avsnittet innehåller några riktlinjer för att hantera själva Query Store-funktionen.
Query Store-tillstånd
Query Store lagrar sina data i användardatabasen och därför har den storleksgräns (konfigurerad med MAX_STORAGE_SIZE_MB
). Om data i Query Store når den gränsen kommer Query Store automatiskt att ändra läget från läs-skriv till skrivskyddat och sluta samla in nya data.
Fråga sys.database_query_store_options för att avgöra om Query Store för närvarande är aktivt och om det just nu samlar in körtidsstatistik eller inte.
SELECT actual_state, actual_state_desc, readonly_reason,
current_storage_size_mb, max_storage_size_mb
FROM sys.database_query_store_options;
Status för Query Store bestäms av kolumnen actual_state
. Om det skiljer sig från önskad status kan kolumnen readonly_reason
ge dig mer information. När Query Store-storleken överskrider kvoten växlar funktionen till read_only läge och anger en orsak. Information om orsaker finns i sys.database_query_store_options.
Hämta alternativ för Query Store
Om du vill ta reda på detaljerad information om Query Store-status kör du följande i en användardatabas.
SELECT * FROM sys.database_query_store_options;
Ange intervall för Query Store
Du kan åsidosätta intervallet för att aggregera frågekörningsstatistik (standardvärdet är 60 minuter). Nytt värde för intervallet exponeras via sys.database_query_store_options
-vyn.
ALTER DATABASE <database_name>
SET QUERY_STORE (INTERVAL_LENGTH_MINUTES = 15);
Slumpmässiga värden är inte tillåtna för INTERVAL_LENGTH_MINUTES
. Använd något av följande intervall: 1, 5, 10, 15, 30, 60 eller 1440 minuter.
Note
För Azure Synapse Analytics stöds inte anpassning av konfigurationsalternativ för Query Store, vilket visas i det här avsnittet.
Utrymmesanvändning i Query Store
Om du vill kontrollera aktuell storlek och gräns för Query Store kör du följande instruktion i användardatabasen.
SELECT current_storage_size_mb, max_storage_size_mb
FROM sys.database_query_store_options;
Om Query Store-lagringen är full använder du följande instruktion för att utöka lagringen.
ALTER DATABASE <database_name>
SET QUERY_STORE (MAX_STORAGE_SIZE_MB = <new_size>);
Ange alternativ för Query Store
Du kan ange flera Query Store-alternativ samtidigt med en enda ALTER DATABASE-instruktion.
ALTER DATABASE <database name>
SET QUERY_STORE (
OPERATION_MODE = READ_WRITE,
CLEANUP_POLICY = (STALE_QUERY_THRESHOLD_DAYS = 30),
DATA_FLUSH_INTERVAL_SECONDS = 3000,
MAX_STORAGE_SIZE_MB = 500,
INTERVAL_LENGTH_MINUTES = 15,
SIZE_BASED_CLEANUP_MODE = AUTO,
QUERY_CAPTURE_MODE = AUTO,
MAX_PLANS_PER_QUERY = 1000,
WAIT_STATS_CAPTURE_MODE = ON
);
En fullständig lista över konfigurationsalternativ finns i ALTER DATABASE SET Options (Transact-SQL).
Rensa utrymmet
Interna tabeller i Query Store skapas i DEN PRIMÄRA filgruppen när databasen skapas och den konfigurationen kan inte ändras senare. Om utrymmet tar slut kanske du vill rensa äldre Query Store-data med hjälp av följande instruktion.
ALTER DATABASE <db_name> SET QUERY_STORE CLEAR;
Alternativt kanske du bara vill rensa ad hoc-frågedata, eftersom det är mindre relevant för frågeoptimeringar och plananalys men tar upp lika mycket utrymme.
I Azure Synapse Analytics är det inte tillgängligt att rensa Query Store. Data behålls automatiskt under de senaste sju dagarna.
Ta bort ad hoc-frågor
Detta rensar ad hoc-frågor och interna frågor från Query Store så att Frågearkivet inte får slut på utrymme och tar bort frågor som vi verkligen behöver spåra.
SET NOCOUNT ON
-- This purges adhoc and internal queries from
-- the Query Store in the current database
-- so that the Query Store does not run out of space
-- and remove queries we really need to track
DECLARE @id int;
DECLARE adhoc_queries_cursor CURSOR
FOR
SELECT q.query_id
FROM sys.query_store_query_text AS qt
JOIN sys.query_store_query AS q
ON q.query_text_id = qt.query_text_id
JOIN sys.query_store_plan AS p
ON p.query_id = q.query_id
JOIN sys.query_store_runtime_stats AS rs
ON rs.plan_id = p.plan_id
WHERE q.is_internal_query = 1 -- is it an internal query then we dont care to keep track of it
OR q.object_id = 0 -- if it does not have a valid object_id then it is an adhoc query and we don't care about keeping track of it
GROUP BY q.query_id
HAVING MAX(rs.last_execution_time) < DATEADD (minute, -5, GETUTCDATE()) -- if it has been more than 5 minutes since the adhoc query ran
ORDER BY q.query_id;
OPEN adhoc_queries_cursor ;
FETCH NEXT FROM adhoc_queries_cursor INTO @id;
WHILE @@fetch_status = 0
BEGIN
PRINT 'EXEC sp_query_store_remove_query ' + str(@id);
EXEC sp_query_store_remove_query @id;
FETCH NEXT FROM adhoc_queries_cursor INTO @id;
END
CLOSE adhoc_queries_cursor;
DEALLOCATE adhoc_queries_cursor;
Du kan definiera din egen procedur med olika logik för att rensa data som du inte längre vill ha.
I föregående exempel används den sp_query_store_remove_query
utökade lagrade proceduren för att ta bort onödiga data. Du kan också:
- Använd
sp_query_store_reset_exec_stats
för att rensa körningsstatistik för en viss plan. - Använd
sp_query_store_remove_plan
för att ta bort en enda plan.
Relaterat innehåll
- ALTER DATABASE SET-alternativ (Transact-SQL)
- katalogvyer för Query Store (Transact-SQL)
- lagrade procedurer för Query Store (Transact-SQL)
- Använd Query Store med In-Memory OLTP-
- Arkitekturguide för frågebearbetning
- Query Store-hintar
- Övervaka prestanda med hjälp av Query Store-
- Finjustera prestanda med Query Store-
- historisk frågelagring och analys i Azure Synapse Analytics