sys.fn_validate_plan_guide (Transact-SQL)

適用対象:SQL ServerAzure SQL Managed Instance

指定したプラン ガイドの有効性を確認します。 この関数は sys.fn_validate_plan_guide 、プラン ガイドがクエリに適用されたときに発生した最初のエラー メッセージを返します。 プラン ガイドが有効な場合は空の行セットが返されます。 データベースの物理設計を変更すると、プラン ガイドが無効になる可能性があります。 たとえば、プラン ガイドで特定のインデックスが指定され、その後そのインデックスが削除された場合、クエリではプラン ガイドを使用できなくなります。

プラン ガイドを検証することで、変更を加えずにオプティマイザーで使用できるかどうかを確認できます。 この関数の結果に基づいて、そのプラン ガイドを削除してクエリを再チューニングするか、データベースのデザインを変更する (プラン ガイドで指定されているインデックスを再作成するなど) かを決定できます。

Transact-SQL 構文表記規則

構文

sys.fn_validate_plan_guide ( plan_guide_id )  

引数

plan_guide_id
sys.plan_guides カタログ ビューで報告されるプラン ガイドの ID です。 plan_guide_idint で 、既定値はありません。

返されるテーブル

列名 データ型 説明
msgnum int エラー メッセージの ID。
severity tinyint メッセージの重大度レベル (1 から 25)。
state smallint エラーが発生したコード内の場所を示すエラーの状態番号です。
message nvarchar(2048) エラーのメッセージ テキスト。

アクセス許可

スコープが OBJECT のプラン ガイドでは、参照先オブジェクトに対する VIEW DEFINITION 権限または ALTER 権限と、プラン ガイドに含まれるクエリやバッチをコンパイルするための権限が必要です。 たとえば、バッチに SELECT ステートメントが含まれている場合は、参照先オブジェクトに対する SELECT 権限が必要です。

スコープが SQL または TEMPLATE のプラン ガイドでは、データベースに対する ALTER 権限と、プラン ガイドに含まれるクエリやバッチをコンパイルするための権限が必要です。 たとえば、バッチに SELECT ステートメントが含まれている場合は、参照先オブジェクトに対する SELECT 権限が必要です。

注釈

このsys.fn_validate_plan_guide関数は、Azure SQL Database では使用できません。

A. データベースのすべてのプラン ガイドの検証をテストする

次の例では、現在のデータベースのすべてのプラン ガイドの有効性を確認します。 空の結果セットが返された場合は、すべてのプラン ガイドが有効です。

USE AdventureWorks2022;  
GO  
SELECT plan_guide_id, msgnum, severity, state, message  
FROM sys.plan_guides  
CROSS APPLY fn_validate_plan_guide(plan_guide_id);  
GO  

B. データベースへの変更を実装する前のテスト 計画ガイドの検証

次の例では、明示的なトランザクションを使用してインデックスを削除します。 この sys.fn_validate_plan_guide 関数は、このアクションによってデータベース内のプラン ガイドが無効になるかどうかを判断するために実行されます。 この関数の結果に基づいて、DROP INDEX ステートメントがコミットされるか、トランザクションがロールバックされます。トランザクションがロールバックされた場合は、インデックスは削除されません。

USE AdventureWorks2022;  
GO  
BEGIN TRANSACTION;  
DROP INDEX IX_SalesOrderHeader_CustomerID ON Sales.SalesOrderHeader;  
-- Check for invalid plan guides.  
IF EXISTS (SELECT plan_guide_id, msgnum, severity, state, message  
           FROM sys.plan_guides  
           CROSS APPLY sys.fn_validate_plan_guide(plan_guide_id))  
    ROLLBACK TRANSACTION;  
ELSE  
    COMMIT TRANSACTION;  
GO  

参照

プラン ガイド
sp_create_plan_guide (Transact-SQL)
sp_create_plan_guide_from_handle (Transact-SQL)