Dela via


Metodtips för att hantera Query Store

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Den här artikeln beskriver hanteringen av SQL Server Query Store och de omgivande funktionerna.

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:

  1. Högerklicka på databasen i SQL Server Management Studio Object Explorer.
  2. Välj Egenskaper.
  3. Välj Query Store. På sidan Query Store kontrollerar du att åtgärdsläge (begärt) är lässkrivning.
  4. Ändra inspelningsläge för Query Store till anpassad.
  5. 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ör MAX_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:

  1. Högerklicka på databasen i SQL Server Management Studio Object Explorer.
  2. Välj Egenskaper.
  3. 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.