Teilen über


sp_control_plan_guide (Transact-SQL)

Gilt für: SQL Server

Die sp_control_plan_guide gespeicherte Systemprozedur wird verwendet, um eine Plananleitung abzulegen, zu aktivieren oder zu deaktivieren.

Transact-SQL-Syntaxkonventionen

Syntax

sp_control_plan_guide
    [ @operation = ] { N'DROP [ ALL ]' | N'DISABLE [ ALL ]' | N'ENABLE [ ALL ]' }
    [ , [ @name = ] N'name' ]
[ ; ]

Argumente

[ @name = ] N'name'

Gibt die Planhinweisliste an, die gelöscht, aktiviert oder deaktiviert wird. @name ist "sysname" mit einem Standardwert von NULL. @name wird in die aktuelle Datenbank aufgelöst. Wenn nicht angegeben, wird standardmäßig @name auf NULL.

[ @operation = ] { N'DROP [ ALL ]' | N'DISABLE [ ALLE ]' | N'ENABLE [ ALLE ]' }

Der Vorgang, der für die in @name angegebene Planführung ausgeführt werden soll. @operation ist nvarchar(60) ohne Standard.

  • DROP

    Legt die von @name angegebene Planführung ab. Nachdem ein Planleitfaden gelöscht wurde, werden zukünftige Ausführungen einer Abfrage, die zuvor vom Planleitfaden abgeglichen wurde, nicht vom Planleitfaden beeinflusst.

  • DROP ALL

    Löscht alle Planhinweislisten in der aktuellen Datenbank. @name kann nicht angegeben werden, wenn DROP ALL angegeben wird.

  • DISABLE

    Deaktiviert die von @name angegebene Plananleitung. Nachdem ein Planleitfaden deaktiviert wurde, werden zukünftige Ausführungen einer Abfrage, die zuvor vom Planleitfaden abgeglichen wurde, vom Planleitfaden nicht beeinflusst.

  • DISABLE ALL

    Deaktiviert alle Planhinweislisten in der aktuellen Datenbank. @name kann nicht angegeben werden, wenn DISABLE ALL angegeben wird.

  • ENABLE

    Aktiviert die von @name angegebene Planführungslinie. Ein Planleitfaden kann mit einer berechtigten Abfrage abgeglichen werden, nachdem sie aktiviert wurde. Planführungslinien sind standardmäßig zum Zeitpunkt der Erstellung aktiviert.

  • ENABLE ALL

    Aktiviert alle Planhinweislisten in der aktuellen Datenbank. @name kann nicht angegeben werden, wenn ENABLE ALL angegeben wird.

Hinweise

Das Löschen oder Ändern einer Funktion, einer gespeicherten Prozedur oder eines DML-Triggers, auf die bzw. den in einer Planhinweisliste verwiesen wird, verursacht einen Fehler.

Das Deaktivieren einer deaktivierten bzw. das Aktivieren einer aktivierten Planhinweisliste hat keine Auswirkung und kann ausgeführt werden, ohne einen Fehler zu verursachen.

Plänehandbücher sind in jeder Edition von SQL Server nicht verfügbar. Eine Liste der Funktionen, die von den SQL Server-Editionen unterstützt werden, finden Sie unter Editionen und unterstützte Funktionen von SQL Server 2022. Sie können jedoch mit der oder DROP ALL der DROP Option in einer beliebigen Edition von SQL Server ausgeführt werdensp_control_plan_guide.

Berechtigungen

Das sp_control_plan_guide Ausführen eines Planleitfadens (erstellter @type = '<object>'Typ OBJECT ) erfordert ALTER die Berechtigung für das Objekt, auf das vom Planleitfaden verwiesen wird. Alle anderen Planhandbücher erfordern ALTER DATABASE die Berechtigung.

Beispiele

A. Aktivieren, Deaktivieren und Ablegen eines Planleitfadens

In dem folgenden Beispiel wird eine Planhinweisliste erstellt, deaktiviert, aktiviert und gelöscht.

--Create a procedure on which to define the plan guide.
IF OBJECT_ID(N'Sales.GetSalesOrderByCountry', N'P') IS NOT NULL
    DROP PROCEDURE Sales.GetSalesOrderByCountry;
GO

CREATE PROCEDURE Sales.GetSalesOrderByCountry (@Country NVARCHAR(60))
AS
BEGIN
    SELECT *
    FROM Sales.SalesOrderHeader AS h
    INNER JOIN Sales.Customer AS c
        ON h.CustomerID = c.CustomerID
    INNER JOIN Sales.SalesTerritory AS t
        ON c.TerritoryID = t.TerritoryID
    WHERE t.CountryRegionCode = @Country;
END
GO

--Create the plan guide.
EXEC sp_create_plan_guide N'Guide3',
    N'SELECT *
    FROM Sales.SalesOrderHeader AS h
    INNER JOIN Sales.Customer AS c
        ON h.CustomerID = c.CustomerID
    INNER JOIN Sales.SalesTerritory AS t
        ON c.TerritoryID = t.TerritoryID
    WHERE t.CountryRegionCode = @Country',
    N'OBJECT',
    N'Sales.GetSalesOrderByCountry',
    NULL,
    N'OPTION (OPTIMIZE FOR (@Country = N''US''))';
GO

--Disable the plan guide.
EXEC sp_control_plan_guide N'DISABLE',
    N'Guide3';
GO

--Enable the plan guide.
EXEC sp_control_plan_guide N'ENABLE',
    N'Guide3';
GO

--Drop the plan guide.
EXEC sp_control_plan_guide N'DROP',
    N'Guide3';
GO

B. Deaktivieren aller Planführungslinien in der aktuellen Datenbank

In dem folgenden Beispiel werden alle Planhinweislisten in der AdventureWorks2022-Datenbank deaktiviert.

USE AdventureWorks2022;
GO
EXEC sp_control_plan_guide N'DISABLE ALL';