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