sys.fn_validate_plan_guide (Transact-SQL)sys.fn_validate_plan_guide (Transact-SQL)

適用対象: yesSQL Server noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

指定したプラン ガイドの有効性を確認します。Verifies the validity of the specified plan guide. sys.fn_validate_plan_guide 関数では、クエリにプラン ガイドを適用した場合に最初に発生するエラーのメッセージが返されます。The sys.fn_validate_plan_guide function returns the first error message that is encountered when the plan guide is applied to its query. プラン ガイドが有効な場合は空の行セットが返されます。An empty rowset is returned when the plan guide is valid. データベースの物理デザインに変更を行った後、プラン ガイドが無効になることができます。Plan guides can become invalid after changes are made to the physical design of the database. たとえば、プラン ガイドでは、特定のインデックスとそのインデックスが削除される、その後を指定する場合、クエリできなくプラン ガイドを使用することです。For example, if a plan guide specifies a particular index and that index is subsequently dropped, the query will no longer be able to use the plan guide.

プラン ガイドを検証することで、変更を加えずにオプティマイザーで使用できるかどうかを確認できます。By validating a plan guide, you can determine whether the guide can be used by the optimizer without modification. この関数の結果に基づいて、そのプラン ガイドを削除してクエリを再チューニングするか、データベースのデザインを変更する (プラン ガイドで指定されているインデックスを再作成するなど) かを決定できます。Based on the results of the function, you can decide to drop the plan guide and retune the query or modify the database design, for example, by re-creating the index specified in the plan guide.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

sys.fn_validate_plan_guide ( plan_guide_id )  

引数Arguments

plan_guide_idplan_guide_id
報告されるプラン ガイドの ID は、 sys.plan_guidesカタログ ビューです。Is the ID of the plan guide as reported in the sys.plan_guides catalog view. plan_guide_idint既定値はありません。plan_guide_id is int with no default.

返されるテーブルTable Returned

列名Column name データ型Data type 説明Description
msgnummsgnum intint エラー メッセージの ID です。ID of the error message.
重要度severity tinyinttinyint メッセージの重大度レベルです。有効値は 1 ~ 25 です。Severity level of the message, between 1 and 25.
statestate smallintsmallint エラーが発生したコード内の場所を示すエラーの状態番号です。State number of the error indicating the point in the code in which the error occurred.
メッセージmessage nvarchar(2048)nvarchar(2048) エラー メッセージのテキストです。Message text of the error.

アクセス許可Permissions

スコープが OBJECT のプラン ガイドでは、参照先オブジェクトに対する VIEW DEFINITION 権限または ALTER 権限と、プラン ガイドに含まれるクエリやバッチをコンパイルするための権限が必要です。OBJECT-scoped plan guides require VIEW DEFINITION or ALTER permission on the referenced object and permissions to compile the query or batch that is provided in the plan guide. たとえば、バッチに SELECT ステートメントが含まれている場合は、参照先オブジェクトに対する SELECT 権限が必要です。For example, if a batch contains SELECT statements, SELECT permissions on the referenced objects are required.

スコープが SQL または TEMPLATE のプラン ガイドでは、データベースに対する ALTER 権限と、プラン ガイドに含まれるクエリやバッチをコンパイルするための権限が必要です。SQL- or TEMPLATE-scoped plan guides require ALTER permission on the database and permissions to compile the query or batch that is provided in the plan guide. たとえば、バッチに SELECT ステートメントが含まれている場合は、参照先オブジェクトに対する SELECT 権限が必要です。For example, if a batch contains SELECT statements, SELECT permissions on the referenced objects are required.

使用例Examples

A.A. データベースのすべてのプラン ガイドの検証をテストするValidating all plan guides in a database

次の例では、現在のデータベースのすべてのプラン ガイドの有効性を確認します。The following example checks the validity of all plan guides in the current database. 空の結果セットが返された場合は、すべてのプラン ガイドが有効です。If an empty result set is returned, all plan guides are valid.

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

B.B. データベースに変更を実装する前にプラン ガイドの検証のテストTesting plan guide validation before implementing a change to the database

次の例では、インデックスを削除する明示的なトランザクションを使用します。The following example uses an explicit transaction to drop an index. sys.fn_validate_plan_guideこのアクションで、データベース内のすべてのプラン ガイドを無効にするかどうかを判断する関数を実行します。The sys.fn_validate_plan_guide function is executed to determine whether this action will invalidate any plan guides in the database. この関数の結果に基づいて、DROP INDEX ステートメントがコミットされるか、トランザクションがロールバックされます。トランザクションがロールバックされた場合は、インデックスは削除されません。Based on the results of the function, the DROP INDEX statement is either committed or the transaction is rolled back, and the index is not dropped.

USE AdventureWorks2012;  
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  

関連項目See Also

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