Verwenden von SQL Server Profiler zum Erstellen und Testen von Planhinweislisten

Gilt für:SQL ServerAzure SQL-Datenbank

Wenn Sie eine Plananleitung erstellen, können Sie SQL Server Profiler verwenden, um den genauen Abfragetext für die Verwendung im statement_text Argument der gespeicherten sp_create_plan_guide Prozedur zu erfassen. Damit kann sichergestellt werden, dass die Planhinweisliste zum Zeitpunkt der Kompilierung mit der Abfrage in Übereinstimmung gebracht wird. Nachdem die Plananleitung erstellt wurde, kann SQL Server Profiler auch verwendet werden, um zu testen, dass die Plananleitung tatsächlich mit der Abfrage übereinstimmt. Im Allgemeinen sollten Sie Planhandbücher mithilfe von SQL Server Profiler testen, um zu überprüfen, ob Ihre Abfrage mit Ihrem Planleitfaden übereinstimmt.

Aufzeichnen von Abfragetext mithilfe von SQL Server Profiler

Wenn Sie eine Abfrage ausführen und den Text genau so erfassen, wie er mithilfe von SQL Server Profiler an SQL Server übermittelt wurde, können Sie eine Plananleitung vom Typ SQL oder TEMPLATE erstellen, die exakt mit dem Abfragetext übereinstimmt. Damit wird sichergestellt, dass die Planhinweisliste vom Abfrageoptimierer verwendet wird.

Angenommen, die folgende Abfrage wird durch eine Anwendung als eigenständiger Batch übermittelt:

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';  

Nehmen wir jetzt an, Sie möchten diese Abfrage mithilfe eines Vorgangs zur Zusammenführungsjoins ausführen, von SHOWPLAN wird jedoch angezeigt, dass die Abfrage keine Zusammenführungsjoin verwendet. Es ist nicht möglich, die Abfrage direkt in der Anwendung zu ändern. Also erstellen Sie stattdessen eine Planhinweisliste, um anzugeben, dass der MERGE JOIN-Abfragehinweis zum Kompilierzeitpunkt an die Abfrage angehängt wird.

Führen Sie die folgenden Schritte aus, um den Text der Abfrage genau so zu erfassen, wie SQL Server sie empfängt:

  1. Starten Sie eine SQL Server Profiler-Ablaufverfolgung, und stellen Sie sicher, dass der EREIGNIStyp "SQL:BatchStarting " ausgewählt ist.

  2. Führen Sie Abfrage mithilfe der Anwendung aus.

  3. Anhalten der SQL Server Profiler-Ablaufverfolgung.

  4. Klicken Sie auf das SQL:BatchStarting -Ereignis, das der Abfrage entspricht.

  5. Klicken Sie mit der rechten Maustaste auf dieses Ereignis, und wählen Sie Ereignisdaten extrahierenaus.

    Wichtig

    Versuchen Sie nicht, den Batchtext zu kopieren, indem Sie ihn im unteren Bereich des Profiler-Ablaufverfolgungsfensters markieren. Das kann dazu führen, dass die von Ihnen erstellte Planhinweisliste nicht mit dem ursprünglichen Batch übereinstimmt.

  6. Speichern Sie die Ereignisdaten in einer Datei. Das ist der Batchtext.

  7. Öffnen Sie die Batchtextdatei in Editor, und kopieren Sie den Text in die Zwischenablage.

  8. Erstellen Sie die Planhinweisliste, und fügen Sie den kopierten Text zwischen die Anführungszeichen ('') ein, die für das @stmt -Argument angegeben sind. Sie müssen alle einfachen Anführungszeichen im @stmt -Argument abgrenzen, indem Sie ihnen ein weiteres einfaches Anführungszeichen voranstellen. Achten Sie darauf, beim Einfügen dieser einfachen Anführungszeichen keine weiteren Zeichen hinzuzufügen oder zu entfernen. So muss z. B. das Datumsliteral '20000101' als ''20000101''abgegrenzt werden.

Die Planhinweisliste sieht dann folgendermaßen aus:

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)';  

Testen von Planhinweislisten mithilfe von SQL Server Profiler

Um zu überprüfen, ob eine Planhinweisliste mit einer Abfrage in Übereinstimmung gebracht wird, gehen Sie folgendermaßen vor:

  1. Starten Sie eine SQL Server Profiler-Ablaufverfolgung, und stellen Sie sicher, dass der Showplan-XML-Ereignistyp ausgewählt ist (unter dem Knoten "Leistung ").

  2. Führen Sie Abfrage mithilfe der Anwendung aus.

  3. Anhalten der SQL Server Profiler-Ablaufverfolgung.

  4. Suchen Sie das Showplan XML -Ereignis für die betroffene Abfrage.

    Hinweis

    Das Ereignis Showplan XML for Query Compile kann nicht verwendet werden. PlanGuideDB ist in diesem Ereignis nicht vorhanden.

  5. Wenn die Planhinweisliste vom Typ OBJECT oder SQL ist, überprüfen Sie, ob das Showplan XML -Ereignis die Attribute PlanGuideDB und PlanGuideName für die Planhinweisliste enthält, die mit der Abfrage übereinstimmen soll. Handelt es sich um eine Planhinweisliste vom Typ TEMPLATE, überprüfen Sie, ob das Showplan XML -Ereignis die Attribute TemplatePlanGuideDB und TemplatePlanGuideName für die erwartete Planhinweisliste enthält. Damit wird die Funktionsfähigkeit der Planhinweisliste überprüft. Diese Attribute sind im <StmtSimple-Element> des Plans enthalten.

Weitere Informationen

sp_create_plan_guide (Transact-SQL)