プラン ガイドの有効化または無効化

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

SQL Server Management Studio または Transact-SQL を使用し、プラン ガイドを無効または有効にする方法について説明します。 データベース内の 1 つのプラン ガイドまたはすべてのプラン ガイドを有効化または無効化できます。

このトピックの内容

はじめに

制限事項と制約事項

  • 有効、無効にする場合のどちらでも、そのプラン ガイドで参照されている関数、ストアド プロシージャ、または DML トリガーを削除または変更しようとすると、エラーが発生します。 上記のいずれかのオブジェクトの削除または変更の前に、常に依存関係を確認してください。

  • 無効なプラン ガイドを無効にする場合や、有効なプラン ガイドを有効にする場合は影響は生じず、エラーなしで実行できます。

セキュリティ

アクセス許可

OBJECT プラン ガイドの無効化または有効化には、プラン ガイドによって参照されるオブジェクト (関数、ストアド プロシージャなど) に対する ALTER 権限が必要です。 その他すべてのプラン ガイドでは、ALTER DATABASE 権限が必要です。

SQL Server Management Studio を使用する

プラン ガイドを無効化または有効化するには

  1. プラス記号をクリックして、無効化または有効化するプラン ガイドのあるデータベースを展開し、プラス記号をクリックして [プログラミング] フォルダーを展開します。

  2. プラス記号をクリックして [プラン ガイド] フォルダーを展開します。

  3. 無効化または有効化するプラン ガイドを右クリックし、 [無効化] または [有効化]を選択します。

  4. [プラン ガイドの無効化] または [プラン ガイドの有効化] ダイアログ ボックスで、選択した動作が成功したことを確認し、 [閉じる]をクリックします。

データベース内のすべてのプラン ガイドを無効化または有効化するには

  1. プラス記号をクリックして、無効化または有効化するプラン ガイドのあるデータベースを展開し、プラス記号をクリックして [プログラミング] フォルダーを展開します。

  2. [プラン ガイド] フォルダーを右クリックし、 [すべて有効化] または [すべて無効化]を選択します。

  3. [すべてのプラン ガイドを無効化] または [すべてのプラン ガイドを有効化] ダイアログ ボックスで、選択した動作が成功したことを確認し、 [閉じる]をクリックします。

Transact-SQL の使用

プラン ガイドを無効化または有効化するには

  1. オブジェクト エクスプローラーで、 データベース エンジンのインスタンスに接続します。

  2. [標準] ツール バーの [新しいクエリ] をクリックします。

  3. 次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] をクリックします。

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

データベース内のすべてのプラン ガイドを無効化または有効化するには

  1. オブジェクト エクスプローラーで、 データベース エンジンのインスタンスに接続します。

  2. [標準] ツール バーの [新しいクエリ] をクリックします。

  3. 次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] をクリックします。

    --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) 」を参照してください。