sp_control_plan_guide (Transact-SQL)
適用対象:SQL Server
プラン ガイドを削除、有効化、または無効化します。
構文
sp_control_plan_guide [ @operation = ] N'<control_option>'
[ , [ @name = ] N'plan_guide_name' ]
<control_option>::=
{
DROP
| DROP ALL
| DISABLE
| DISABLE ALL
| ENABLE
| ENABLE ALL
}
引数
N'plan_guide_name'
削除するか、有効または無効にするプラン ガイドを指定します。 plan_guide_nameは現在のデータベースに解決されます。 指定しない場合、 plan_guide_name は既定で NULL になります。
DROP
plan_guide_nameで指定されたプラン ガイドを削除します。 プラン ガイドが削除された後、プラン ガイドによって以前に一致していたクエリの今後の実行は、プラン ガイドの影響を受けません。
DROP ALL
現在のデータベースのすべてのプラン ガイドを削除します。 DROP ALL が指定されている場合、N'plan_guide_name を指定できません。
DISABLE
plan_guide_nameで指定されたプラン ガイドを無効にします。 プラン ガイドが無効になった後は、そのプラン ガイドに以前一致していたクエリを実行しても、そのプラン ガイドによる影響は受けません。
DISABLE ALL
現在のデータベースのすべてのプラン ガイドを無効にします。 DISABLE ALL が指定されている場合、N'plan_guide_nameを指定できません。
有効化
plan_guide_nameで指定されたプラン ガイドを有効にします。 プラン ガイドが有効になった後は、そのプラン ガイドを適切なクエリと照合できます。 既定では、プラン ガイドは作成時に有効になります。
ENABLE ALL
現在のデータベースのすべてのプラン ガイドを有効にします。 ENABLE ALL が指定されている場合は、N'plan_guide_name**'**を指定できません。
解説
有効、無効にする場合のどちらでも、そのプラン ガイドで参照されている関数、ストアド プロシージャ、または DML トリガーを削除または変更しようとすると、エラーが発生します。
無効なプラン ガイドを無効にする場合や、有効なプラン ガイドを有効にする場合は影響は生じず、エラーなしで実行できます。
プラン ガイドは、Microsoft SQL Server のすべてのエディションで使用できるわけではありません。 SQL Server の各エディションでサポートされる機能の一覧については、「SQL Server 2022 の各エディションとサポートされている機能」を参照してください。 ただし、SQL Server の任意のエディションで DROP または DROP ALL オプションを使用してsp_control_plan_guideを実行できます。
アクセス許可
OBJECT 型 (@type ='OBJECT' を指定して作成) のプラン ガイドに対してsp_control_plan_guideを実行するには、プラン ガイドによって参照されるオブジェクトに対する ALTER 権限が必要です。 その他すべてのプラン ガイドでは、ALTER DATABASE 権限が必要です。
例
A. プラン ガイドを無効にし、有効にした後、削除する
次の例ではプラン ガイドを作成し、それを無効にし、有効にした後、削除します。
--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';
B. 現在のデータベースのすべてのプラン ガイドを無効にする
次の例では、AdventureWorks2022
データベースのすべてのプラン ガイドを無効にします。
USE AdventureWorks2022;
GO
EXEC sp_control_plan_guide N'DISABLE ALL';
参照
データベース エンジン ストアド プロシージャ (Transact-SQL)
システム ストアド プロシージャ (Transact-SQL)
sp_create_plan_guide (Transact-SQL)
sys.plan_guides (Transact-SQL)
プラン ガイド
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示