Freigeben über


Entwerfen und Implementieren von Planhinweislisten

Aktualisiert: 15. September 2007

Sie können Planhinweislisten verwenden, um die Leistung von Abfragen zu optimieren, wenn Sie den Text der Abfrage nicht direkt ändern können oder möchten. Planhinweislisten können zur Übereinstimmung mit Abfragen erstellt werden, die im folgenden Kontext ausgeführt werden:

  • OBJECT-Planhinweislisten zur Übereinstimmung mit Abfragen, die im Kontext von gespeicherten Prozeduren in Transact-SQL, skalaren Funktionen, Tabellenwertfunktionen mit mehreren Anweisungen und DML-Triggern ausgeführt werden.
  • Eine SQL-Planhinweisliste zur Übereinstimmung mit Abfragen, die im Kontext von eigenständigen Transact-SQL-Anweisungen und Batches, die nicht Teil eines Datenbankobjekts sind, ausgeführt werden. SQL-basierte Planhinweislisten können auch zur Übereinstimmung mit Abfragen verwendet werden, die in einer angegebenen Form parametrisiert werden.
  • Eine TEMPLATE-Planhinweisliste zur Übereinstimmung mit eigenständigen Abfragen, die in einer angegebenen Form parametrisiert werden. Diese Planhinweislisten werden verwendet, um die aktuelle PARAMETERIZATION-Datenbankoption für eine bestimmte Abfrageklasse außer Kraft zu setzen.
ms189854.note(de-de,SQL.90).gifHinweis:
Planhinweislisten können nur in der Standard, Developer, Evaluation und Enterprise Edition von SQL Server 2005 verwendet werden, sie sind aber in allen Editionen sichtbar. Sie können auch in jeder Edition eine Datenbank anfügen, die Planhinweislisten enthält. Planhinweislisten bleiben beim Wiederherstellen oder Anfügen einer Datenbank in einer aktualisierten Version von SQL Server 2005 erhalten. Nach dem Serverupdate sollten Sie in jeder Datenbank prüfen, ob die Planhinweislisten wirklich erwünscht sind.

Für SQL- oder TEMPLATE-basierte Planhinweislisten, die in der sp_create_plan_guide-Anweisung @type = N'SQL' oder @type = N'TEMPLATE' angeben, prüft SQL Server die Werte der Argumente @module_or_batch und @params gegen eine Abfrage, indem beide Werte Zeichen für Zeichen verglichen werden. Das bedeutet, dass Sie den Text genau so bereitstellen müssen, wie er von SQL Server im tatsächlichen Batch empfangen wird. Mithilfe von SQL Server Profiler können Sie den eigentlichen Batchtext erfassen. Planhinweislisten sollten Sie in der Regel mithilfe von SQL Server Profiler testen und dabei überprüfen, ob Ihre Abfrage mit Ihrer Planhinweisliste übereinstimmt. Das Testen von SQL- oder TEMPLATE-basierten Planhinweislisten durch das Ausführen von Batches aus SQL Server Management Studio kann zu unvorhergesehenen Ergebnissen führen. Weitere Informationen finden Sie unter Verwenden von SQL Server Profiler zum Erstellen und Testen von Planhinweislisten.

ms189854.note(de-de,SQL.90).gifHinweis:
Der Batch, der die Anweisung enthält, für die Sie eine Planhinweisliste erstellen wollen, darf keine USE database-Anweisung enthalten.

Wenn @type = 'SQL' und @module\_or\_batch auf NULL festgelegt sind, wird @module\_or\_batch auf den Wert @stmt festgelegt. Dies bedeutet, dass der Wert für statement_text im gleichen Format, Zeichen für Zeichen, wie beim Übermitteln an SQL Server bereitgestellt werden muss. Es findet keine interne Konvertierung zur Vereinfachung der Übereinstimmung statt.

Planhinweislisten beziehen sich auf die Datenbank, in der sie erstellt werden. Daher können nur die Planhinweislisten gegen die Abfrage geprüft werden, die in der zum Zeitpunkt der Ausführung einer Abfrage aktuellen Datenbank vorhanden sind. Beispiel: Wenn AdventureWorks die aktuelle Datenbank ist und die folgende Abfrage ausgeführt wird:

SELECT * FROM Person.Contact

Dann können nur in der AdventureWorks-Datenbank vorhandene Planhinweislisten mit dieser Abfrage verglichen werden.

Wenn jedoch AdventureWorks die aktuelle Datenbank ist und die folgenden Anweisungen ausgeführt werden:

USE DB1;
GO
SELECT * FROM Person.Contact;

Dann können nur in DB1 vorhandene Planhinweislisten mit dieser Abfrage verglichen werden, weil die Abfrage im Kontext von DB1 ausgeführt wird.

In einer Planhinweisliste können beliebige Kombinationen gültiger Abfragehinweise verwendet werden. Wenn eine Planhinweisliste mit einer Abfrage übereinstimmt, wird die in der Planhinweisliste angegebene OPTION-Klausel vor dem Kompilieren und Optimieren zur Abfrage hinzugefügt. Wenn eine mit einer Planhinweisliste übereinstimmende Abfrage bereits eine OPTION-Klausel besitzt, ersetzen die in der Planhinweisliste angegebenen Abfragehinweise die in der Abfrage enthaltenen. Damit eine Planhinweisliste mit einer Abfrage übereinstimmt, die bereits eine OPTION-Klausel besitzt, müssen Sie die OPTION-Klausel der Abfrage aufnehmen, wenn Sie den Text der Abfrage angeben, der mit der sp_create_plan_guide-Anweisung übereinstimmen soll. Wenn Sie wollen, dass die in der Planhinweisliste angegebenen Abfragehinweise zu den bereits in der Abfrage vorhandenen Hinweisen hinzugefügt werden, statt diese zu ersetzen, müssen Sie in der OPTION-Klausel der Planhinweisliste sowohl die ursprünglichen Hinweise als auch die zusätzlichen Hinweise angeben.

Die maximale Anzahl der erstellbaren Planhinweislisten ist lediglich durch die verfügbaren Systemressourcen begrenzt. Planhinweislisten sollten jedoch sparsam verwendet werden, um lediglich einzelne Abfragen zu behandeln, deren Leistung verbessert oder stabilisiert werden soll. Planhinweislisten sollten nicht verwendet werden, um die überwiegende Abfragelast einer bereitgestellten Anwendung zu beeinflussen. Insbesondere solche Planhinweislisten, die den USE PLAN-Abfragehinweis anwenden, wenden für die betroffene Abfrage einen festen Plan an. Daher kann der Abfrageoptimierer den Plan für die Abfrage nicht mehr an Änderungen der Statistiken und Indizes anpassen.

Wenn Sie Planhinweislisten einsetzen wollen, die die USE PLAN-Abfrage verwenden, dann sollten Sie die Vorteile der Anwendung eines festen Plans gegen die Unfähigkeit abwägen, den Plan automatisch an Änderungen der Datenverteilung und der verfügbaren Indizes anzupassen.

Es empfiehlt sich, die Definitionen der Planhinweislisten bei einem Update Ihrer Anwendung auf eine neue Version von SQL Server neu zu bewerten und zu testen. Die Anforderungen an die Leistungsoptimierung und das Übereinstimmungsverhalten der Planhinweislisten kann sich verändern.

Auswirkungen der Planhinweisliste auf den Plancache

Durch Erstellen einer Planhinweisliste in einem Modul wird der Abfrageplan für dieses Modul aus dem Plancache entfernt. Durch Erstellen einer Planhinweisliste vom Typ OBJECT oder SQL in einem Batch wird der Abfrageplan für einen Batch mit dem gleichen Hashwert entfernt. Durch Erstellen einer Planhinweisliste vom Typ TEMPLATE werden alle Batches mit einer einzigen Anweisung aus dem Plancache innerhalb dieser Datenbank entfernt.

Erstellen einer Planhinweisliste

Deaktivieren, Reaktivieren oder Löschen von Planhinweislisten

Erhalten von Informationen zu in der aktuellen Datenbank enthaltenen Planhinweislisten

Siehe auch

Konzepte

Optimieren von Abfragen in bereitgestellten Anwendungen mit Planhinweislisten

Andere Ressourcen

Abfrageleistung

Hilfe und Informationen

Informationsquellen für SQL Server 2005

Änderungsverlauf

Version Verlauf

15. September 2007

Geänderter Inhalt:
  • Die Anforderungen für Planhinweislisten für statement_text, wenn @type = 'SQL' und @module_or_batch auf NULL festgelegt sind, wurden verdeutlicht.
  • Informationen zu den Auswirkungen des Erstellens von Planhinweislisten auf den Plancache wurden hinzugefügt.