適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL Server Management Studio または Transact-SQL を使用し、プラン ガイドを無効または有効にする方法について説明します。 データベース内の 1 つのプラン ガイドまたはすべてのプラン ガイドを有効化または無効化できます。
このトピックの内容
作業を開始する準備:
プラン ガイドの無効化または有効化に使用するもの:
はじめに
制限事項と制約事項
有効、無効にする場合のどちらでも、そのプラン ガイドで参照されている関数、ストアド プロシージャ、または DML トリガーを削除または変更しようとすると、エラーが発生します。 上記のいずれかのオブジェクトの削除または変更の前に、常に依存関係を確認してください。
無効なプラン ガイドを無効にする場合や、有効なプラン ガイドを有効にする場合は影響は生じず、エラーなしで実行できます。
セキュリティ
アクセス許可
OBJECT プラン ガイドの無効化または有効化には、プラン ガイドによって参照されるオブジェクト (関数、ストアド プロシージャなど) に対する ALTER 権限が必要です。 その他すべてのプラン ガイドでは、ALTER DATABASE 権限が必要です。
SQL Server Management Studio を使用する
プラン ガイドを無効化または有効化するには
プラス記号をクリックして、無効化または有効化するプラン ガイドのあるデータベースを展開し、プラス記号をクリックして [プログラミング] フォルダーを展開します。
プラス記号をクリックして [プラン ガイド] フォルダーを展開します。
無効化または有効化するプラン ガイドを右クリックし、 [無効化] または [有効化]を選択します。
[プラン ガイドの無効化] または [プラン ガイドの有効化] ダイアログ ボックスで、選択した動作が成功したことを確認し、 [閉じる]をクリックします。
データベース内のすべてのプラン ガイドを無効化または有効化するには
プラス記号をクリックして、無効化または有効化するプラン ガイドのあるデータベースを展開し、プラス記号をクリックして [プログラミング] フォルダーを展開します。
[プラン ガイド] フォルダーを右クリックし、 [すべて有効化] または [すべて無効化]を選択します。
[すべてのプラン ガイドを無効化] または [すべてのプラン ガイドを有効化] ダイアログ ボックスで、選択した動作が成功したことを確認し、 [閉じる]をクリックします。
Transact-SQL の使用
プラン ガイドを無効化または有効化するには
オブジェクト エクスプローラーで、 データベース エンジンのインスタンスに接続します。
[標準] ツール バーの [新しいクエリ] をクリックします。
次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] をクリックします。
--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''))'; --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
データベース内のすべてのプラン ガイドを無効化または有効化するには
オブジェクト エクスプローラーで、 データベース エンジンのインスタンスに接続します。
[標準] ツール バーの [新しいクエリ] をクリックします。
次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] をクリックします。
--Disable all plan guides in the database. EXEC sp_control_plan_guide N'DISABLE ALL'; GO --Enable all plan guides in the database. EXEC sp_control_plan_guide N'ENABLE ALL'; GO
詳細については、「sp_control_plan_guide (Transact-SQL) 」を参照してください。