Freigeben über


Grundlegendes zum Erzwingen von Plänen

Der USE PLAN-Abfragehinweis kann verwendet werden, um zu erzwingen, dass der Abfrageoptimierer einen bestimmten Abfrageplan für eine Abfrage verwendet. Die Funktionsweise des USE PLAN-Abfragehinweises besteht im Annehmen des Abfrageplans, den Sie im XML-Format als Argument verwenden möchten. USE PLAN kann für Abfragen verwendet werden, deren Pläne zu langsamen Abfragezeiten führen und für die das Vorhandensein besserer Pläne bekannt ist. Ein häufiges Szenario bezieht sich auf Abfragen, die in einer früheren Version von SQL Server zufrieden stellend ausgeführt wurden, in einer aktualisierten Version (Service Pack oder vollständige Versionsaktualisierung) jedoch Leistungseinbußen aufweisen. In den meisten Fällen führt eine Aktualisierung zu einer gleichen oder besseren Leistung hinsichtlich der Ausführungszeiten der meisten Abfragen; es können jedoch auch Ausnahmen auftreten. Der USE PLAN-Abfragehinweis steht für die Behandlung der Fälle zur Verfügung, in denen ein Abfrageplan, der vom Abfrageoptimierer in einer früheren Produktversion ausgewählt wurde, dem nach der Aktualisierung ausgewählten Plan vorzuziehen ist.

Der USE PLAN-Abfragehinweis kann mit Planhinweislisten verwendet werden, wenn Sie die Problembehandlung einer schlechten Abfrageleistung in bereitgestellten Anwendungen durchführen. Planhinweislisten werden zum Anwenden von Abfragehinweisen auf Abfragen verwendet, wenn Sie die Anwendung nicht direkt ändern möchten oder können. Weitere Informationen zu Planhinweislisten finden Sie unter Optimieren von Abfragen in bereitgestellten Anwendungen mit Planhinweislisten. Ausführlichere Szenarien, die zeigen, wie der USE PLAN-Abfragehinweis in Planhinweislisten verwendet werden kann, finden Sie unter Szenario zum Erzwingen eines Plans: Erstellen einer Planhinweisliste, die einen Abfrageplan angibt und Szenario zum Erzwingen eines Planes: Erstellen einer Planhinweisliste zum Erzwingen eines Planes, der aus einer umgeschriebenen Abfrage abgerufen wird.

Das Erzwingen von Plänen kann für die meisten Typen von Abfragen verwendet werden. Dazu zählen z. B. Abfragen von Tabellen, gruppierten und nicht gruppierten Indizes, indizierten Sichten und partitionierten Tabellen und Indizes. USE PLAN kann mit den Anweisungen INSERT, UPDATE, MERGE oder DELETE der Datenbearbeitungssprache (DML) angegeben werden. Beachten Sie, dass Änderungen am Datenbankschema, z. B. das Hinzufügen oder Löschen eines Indexes, den im USE PLAN-Hinweis angegebenen Plan ungültig werden lassen können. Wenn USE PLAN direkt in einer Abfrage angegeben wird, bewirkt ein ungültiger Plan, dass die Abfrage fehlschlägt. Wenn USE PLAN in einer Planhinweisliste angegeben ist, führt ein ungültiger Plan zwar nicht zu einem Abfragefehler, der Plan wird jedoch ohne den Hinweis kompiliert und ist daher eventuell nicht die beste Wahl. Wenn der USE PLAN-Hinweis innerhalb einer Planhinweisliste verwendet wird, können Sie mit der sys.fn_validate_plan_guide-Funktion die Gültigkeit des Plans überprüfen. Auf der Basis der Ergebnisse der Funktion können Sie entscheiden, dass die Planhinweisliste gelöscht und die Abfrage neu optimiert wird, oder Sie können den Datenbankentwurf ändern. Sie könnten beispielsweise den in der Planhinweisliste angegebenen Index neu erstellen.

Mit dem USE PLAN-Abfragehinweis generierte Abfragepläne werden genau wie andere Abfragepläne zwischengespeichert.

Einschränkungen des Erzwingens von Plänen

Das Erzwingen eines Plans schränkt eine Abfrage auf einen einzigen, statischen Ausführungsplan ein. Durch das Erzwingen eines Plans besteht für den Abfrageoptimierer keine Möglichkeit, Anpassungen an sich ändernde Datengrößen und -verteilungen, neue Indizes und andere Variablen vorzunehmen. Bei falscher Verwendung kann das Erzwingen eines Plans zu Leistungsproblemen führen. Das Erzwingen eines Plans sollte erst verwendet werden, nachdem andere Optionen zum Optimieren der Abfrageleistung vollständig untersucht wurden, z. B. das Verwenden aktueller, neuer Statistiken und optimierter Indizes. Das Erzwingen eines Plans sollte nur selten verwendet und ausschließlich durch erfahrene Datenbankadministratoren und -entwickler vorgenommen werden, die Kenntnisse zu Leistungsfragen und der sich ändernden Umgebung ihrer Datenbank und Anwendungen besitzen.

Wenn Sie den USE PLAN-Abfragehinweis zum Beeinflussen der Kompilierung einer Abfrage in einer bereitgestellten Anwendung verwenden, sollte dieser Hinweis in einer Planhinweisliste verwendet und nicht direkt in die Anwendung eingebettet werden. Durch diese Vorgehensweise können Sie die folgenden Fallstricke vermeiden:

  • Sie können den Hinweis ändern oder entfernen, ohne die Anwendung ändern oder erneut kompilieren zu müssen. In seltenen Fällen kann ein USE PLAN-Hinweis, der in einer Version von SQL Server gültig war, in einem zukünftigen Service Pack oder in einer zukünftigen Version nicht mehr gültig sein. Aus diesem Grund kann es erforderlich sein, einen USE PLAN-Hinweis zu ändern oder zu entfernen, nachdem eine Anwendung bereitgestellt wurde.

  • Das direkte Verwenden eines großen Hinweises in einer Abfrage kann vermieden werden. Dies vereinfacht das Lesen der Abfrage.

    Wichtiger HinweisWichtig

    Wenn Sie eine Planhinweisliste erstellen, der USE PLAN verwendet, sollten Sie während des Testens überprüfen, ob die Abfrage, deren Plan erzwungen werden soll, in der Regel mit einer Cursoranforderung übermittelt wird. Abfragepläne für cursorbasierte Abfragen unterscheiden sich von Abfrageplänen für Nichtcursorabfragen. Daher muss beim Erstellen einer Planhinweisliste, die einen USE PLAN-Hinweis angibt, der für eine mit einer Cursoranforderung übermittelte Abfrage gilt, die Planhinweisliste einen Cursorplan angeben. Weitere Informationen finden Sie unter Verwenden des USE PLAN-Abfragehinweises für Abfragen mit Cursorn.

Das Erzwingen eines Plans wird für die folgenden Arten von Abfragen nicht unterstützt:

Siehe auch

Konzepte

Andere Ressourcen