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
Azure SQL Database
När du skapar en planguide kan du använda SQL Server Profiler för att samla in den exakta frågetexten som ska användas i argumentet statement_text för den sp_create_plan_guide lagrade proceduren. Detta hjälper dig att se till att planguiden matchas med frågan vid kompileringstillfället. När planguiden har skapats kan SQL Server Profiler också användas för att testa att planguiden faktiskt matchas med frågan. I allmänhet bör du testa planguider med hjälp av SQL Server Profiler för att kontrollera att frågan matchas med din planguide.
Samla in frågetext med hjälp av SQL Server Profiler
Om du kör en fråga och samlar in texten precis som den skickades till SQL Server med hjälp av SQL Server Profiler kan du skapa en planguide av typen SQL eller TEMPLATE som matchar frågetexten exakt. Detta säkerställer att planguiden används av frågeoptimeraren.
Tänk på följande fråga som skickas av ett program som en fristående batch:
SELECT COUNT(*) AS c
FROM Sales.SalesOrderHeader AS h
INNER JOIN Sales.SalesOrderDetail AS d
ON h.SalesOrderID = d.SalesOrderID
WHERE h.OrderDate BETWEEN '20000101' and '20050101';
Anta att du vill att den här frågan ska köras med en kopplingsåtgärd, men SHOWPLAN anger att frågan inte använder en sammanslagningskoppling. Du kan inte ändra frågan direkt i programmet, så i stället skapar du en planguide för att ange att frågetipset MERGE JOIN ska läggas till i frågan vid kompileringstillfället.
Följ dessa steg för att samla in texten i frågan precis som SQL Server tar emot den:
Starta en SQL Server Profiler-spårning och kontrollera att SQL:BatchStarting händelsetyp är markerad.
Låt programmet köra frågan.
Pausa SQL Server Profiler-spårning.
Klicka på SQL:BatchStarting händelse som motsvarar frågan.
Högerklicka och välj Extrahera händelsedata.
Viktig
Försök inte kopiera batchtexten genom att välja den i den nedre rutan i spårningsfönstret Profiler. Detta kan leda till att planguiden som du skapar inte matchar den ursprungliga batchen.
Spara händelsedata i en fil. Det här är batchtexten.
Öppna batchtextfilen i Anteckningar och kopiera texten till bufferten kopiera och klistra in.
Skapa planguiden och klistra in den kopierade texten inom citattecknen () som angetts för argumentet @stmt. Du måste undvika enkla citattecken i argumentet @stmt genom att föregå dem med ett annat citattecken. Var noga med att inte lägga till eller ta bort andra tecken när du infogar dessa enkla citattecken. Till exempel måste datumliteralen 20000101 avgränsas som 20000101.
Här är planguiden:
EXEC sp_create_plan_guide
@name = N'MyGuide1',
@stmt = N'<paste the text copied from the batch text file here>',
@type = N'SQL',
@module_or_batch = NULL,
@params = NULL,
@hints = N'OPTION (MERGE JOIN)';
Testplansguider med hjälp av SQL Server Profiler
Följ dessa steg för att kontrollera att en planguide matchas med en fråga:
Starta en SQL Server Profiler-spårning och kontrollera att Showplan XML- händelsetyp är markerad (finns under noden Prestanda).
Låt programmet köra frågan.
Pausa SQL Server Profiler-spårning.
Hitta händelsen Showplan XML för den berörda frågan.
Not
Det går inte att använda Showplan XML för frågekompilering händelse. PlanGuideDB finns inte i den händelsen.
Om planguiden är av typen OBJECT eller SQL kontrollerar du att händelsen Showplan XML innehåller PlanGuideDB- och PlanGuideName attribut för planguiden som du förväntade dig att matcha frågan. Eller om det gäller en mallplansguide kontrollerar du att händelsen Showplan XML omfattar attributen TemplatePlanGuideDB- och TemplatePlanGuideName- för den förväntade planguiden. Detta verifierar att planguiden fungerar. Dessa attribut finns under <StmtSimple>-elementet i planen.