sys.dm_exec_plan_attributes (Transact-SQL)sys.dm_exec_plan_attributes (Transact-SQL)

適用対象:○SQL Server (2008 以降)×Azure SQL Database×Azure SQL Data Warehouse ×Parallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

プラン ハンドルで指定したプランのプラン属性ごとに 1 行のデータを返します。Returns one row per plan attribute for the plan specified by the plan handle. このテーブル値関数を使用すると、キャッシュ キーの値やプランの同時実行数など、特定のプランに関する詳細情報を取得できます。You can use this table-valued function to get details about a particular plan, such as the cache key values or the number of current simultaneous executions of the plan.

注意

によって返される情報の一部にこの関数は、マップ、 sys.syscacheobjects旧バージョンとの互換性ビューです。Some of the information returned through this function maps to the sys.syscacheobjects backward compatibility view.

構文Syntax

sys.dm_exec_plan_attributes ( plan_handle )  

引数Arguments

plan_handleplan_handle
既に実行されていて、そのプランがプラン キャッシュに格納されているバッチのクエリ プランを一意に識別します。Uniquely identifies a query plan for a batch that has executed and whose plan resides in the plan cache. plan_handlevarbinary (64)です。plan_handle is varbinary(64). プラン ハンドルを取得できます、 sys.dm_exec_cached_plans動的管理ビュー。The plan handle can be obtained from the sys.dm_exec_cached_plans dynamic management view.

返されるテーブルTable Returned

列名Column name データ型Data type DescriptionDescription
属性 (attribute)attribute varchar (128)varchar(128) このプランに関連付けられている属性の名前。Name of the attribute associated with this plan. この 1 つのすぐ下に、テーブルには、使用可能な属性、そのデータ型とその説明が一覧表示します。The table immediately below this one lists the possible attributes, their data types, and their descriptions.
valuevalue sql_variantsql_variant プランに関連付けられている属性の値。Value of the attribute that is associated with this plan.
is_cache_keyis_cache_key bitbit 属性が、プランに対するキャッシュ参照キーの一部として使用されているかどうかを示します。Indicates whether the attribute is used as part of the cache lookup key for the plan.

上記の表では、属性次の値を持つことができます。From the above table, attribute can have the following values:

属性Attribute データ型Data type DescriptionDescription
set_optionsset_options intint プランをコンパイルしたオプションの値を示します。Indicates the option values that the plan was compiled with.
objectidobjectid intint キャッシュ内のオブジェクトを検索するために使用される主キーの 1 つです。One of the main keys used for looking up an object in the cache. これは、オブジェクトに格納されている ID sys.objectsのデータベース オブジェクト (プロシージャ、ビュー、トリガー、およびなど)。This is the object ID stored in sys.objects for database objects (procedures, views, triggers, and so on). "アドホック プラン" または "準備されたプラン" では、バッチ テキストの内部ハッシュです。For plans of type "Adhoc" or "Prepared", it is an internal hash of the batch text.
dbiddbid intint プランによって参照されるエンティティを含むデータベースの ID を指定します。Is the ID of the database containing the entity the plan refers to.

アドホック プランまたは準備されたプランでは、バッチの実行元となるデータベース ID です。For ad hoc or prepared plans, it is the database ID from which the batch is executed.
dbid_executedbid_execute intint 格納されているシステム オブジェクトに対して、リソースデータベース、キャッシュされたプランの実行元となるデータベース ID。For system objects stored in the Resource database, the database ID from which the cached plan is executed. その他の場合は 0 になります。For all other cases, it is 0.
user_iduser_id intint 値 -2 は、送られたバッチが暗黙的な名前解決に依存せず、複数ユーザー間での共有が可能であることを示します。Value of -2 indicates that the batch submitted does not depend on implicit name resolution and can be shared among different users. これは推奨される方法です。This is the preferred method. 他の値は、データベースのクエリを送っているユーザーのユーザー ID を示します。Any other value represents the user ID of the user submitting the query in the database.
language_idlanguage_id smallintsmallint キャッシュ オブジェクトを作成した接続の言語の ID です。ID of the language of the connection that created the cache object. 詳細については、次を参照してください。 sys.syslanguages (です。TRANSACT-SQL と #41 です。.For more information, see sys.syslanguages (Transact-SQL).
date_formatdate_format smallintsmallint キャッシュ オブジェクトを作成した接続の日付形式です。Date format of the connection that created the cache object. 詳細については、次を参照してください。 SET DATEFORMAT と #40 です。TRANSACT-SQL と #41 です。.For more information, see SET DATEFORMAT (Transact-SQL).
date_firstdate_first tinyinttinyint 日付の最初の値です。Date first value. 詳細については、次を参照してください。 SET DATEFIRST (です。TRANSACT-SQL と #41 です。.For more information, see SET DATEFIRST (Transact-SQL).
ステータスstatus intint キャッシュ参照キーの一部である内部ステータス ビットです。Internal status bits that are part of the cache lookup key.
required_cursor_optionsrequired_cursor_options intint カーソルの種類など、ユーザーによって指定されたカーソル オプションです。Cursor options specified by the user such as the cursor type.
acceptable_cursor_optionsacceptable_cursor_options intint SQL ServerSQL Server がステートメントの実行をサポートするために暗黙的に変換できるカーソル オプションです。Cursor options that SQL ServerSQL Server may implicitly convert to in order to support the execution of the statement. たとえば、ユーザーは動的カーソルを指定することがありますが、クエリ オプティマイザーでは、このカーソルの種類を静的カーソルに変換することが許可されています。For example, the user may specify a dynamic cursor, but the query optimizer is permitted to convert this cursor type to a static cursor.
inuse_exec_contextinuse_exec_context intint クエリ プランを使用している現在実行中のバッチの数です。Number of currently executing batches that are using the query plan.
free_exec_contextfree_exec_context intint クエリ プランのキャッシュされた実行コンテキストのうち、現在使用されていない実行コンテキストの数です。Number of cached execution contexts for the query plan that are not being currently used.
hits_exec_contexthits_exec_context intint 実行コンテキストがプラン キャッシュから取得され再利用された回数です。これにより、SQL ステートメントを再コンパイルする際のオーバーヘッドが少なくなります。Number of times the execution context was obtained from the plan cache and reused, saving the overhead of recompiling the SQL statement. この値は、これまでのすべてのバッチ実行の集計です。The value is an aggregate for all batch executions so far.
misses_exec_contextmisses_exec_context intint 実行コンテンツがプラン キャッシュに見つからなかった回数です。これにより、バッチ実行に対して新しい実行コンテンツが作成されます。Number of times that an execution context could not be found in the plan cache, resulting in the creation of a new execution context for the batch execution.
removed_exec_contextremoved_exec_context intint キャッシュされたプランのメモリの負荷により削除された実行コンテンツの数です。Number of execution contexts that have been removed because of memory pressure on the cached plan.
inuse_cursorsinuse_cursors intint キャッシュされたプランを使用しているカーソルを 1 つ以上含む、現在実行中のバッチの数です。Number of currently executing batches containing one or more cursors that are using the cached plan.
free_cursorsfree_cursors intint キャッシュされたプランのアイドル状態または解放されたカーソルの数です。Number of idle or free cursors for the cached plan.
hits_cursorshits_cursors intint キャッシュされたプランから非アクティブなカーソルが取得され、再利用された回数です。Number of times that an inactive cursor was obtained from the cached plan and reused. この値は、これまでのすべてのバッチ実行の集計です。The value is an aggregate for all batch executions so far.
misses_cursorsmisses_cursors intint 非アクティブなカーソルがキャッシュに見つからなかった回数です。Number of times that an inactive cursor could not be found in the cache.
removed_cursorsremoved_cursors intint キャッシュされたプランのメモリの負荷により削除されたカーソルの数です。Number of cursors that have been removed because of memory pressure on the cached plan.
sql_handlesql_handle varbinary(64)varbinary(64) バッチの SQL ハンドルです。The SQL handle for the batch.
merge_action_typemerge_action_type smallintsmallint MERGE ステートメントの結果として使用するトリガーの実行プランの種類。The type of trigger execution plan used as the result of a MERGE statement.

0 は、非トリガー プラン (MERGE ステートメントの結果として実行されないトリガー プラン)、または DELETE アクションのみを指定する MERGE ステートメントの結果として実行されるトリガー プランを示します。0 indicates a non-trigger plan, a trigger plan that does not execute as the result of a MERGE statement, or a trigger plan that executes as the result of a MERGE statement that only specifies a DELETE action.

1 は、MERGE ステートメントの結果として実行される INSERT トリガー プランを示します。1 indicates an INSERT trigger plan that runs as the result of a MERGE statement.

2 は、MERGE ステートメントの結果として実行される UPDATE トリガー プランを示します。2 indicates an UPDATE trigger plan that runs as the result of a MERGE statement.

3 は、対応する INSERT アクションまたは UPDATE アクションを含む MERGE ステートメントの結果として実行される DELETE トリガー プランを示します。3 indicates a DELETE trigger plan that runs as the result of a MERGE statement containing a corresponding INSERT or UPDATE action.

連鎖操作によって実行される入れ子のトリガーの場合、この値は、連鎖操作の原因となった MERGE ステートメントのアクションです。For nested triggers run by cascading actions, this value is the action of the MERGE statement that caused the cascade.

PermissionsPermissions

SQL ServerSQL Serverサーバーに対する VIEW SERVER STATE 権限が必要です。On SQL ServerSQL Server requires VIEW SERVER STATE permission on the server.

SQL データベースSQL Database Premium 階層には、データベースの VIEW DATABASE STATE 権限が必要です。On SQL データベースSQL Database Premium Tiers requires the VIEW DATABASE STATE permission in the database. SQL データベースSQL Database Standard および Basic 階層が必要です、 SQL データベースSQL Database管理者アカウントです。On SQL データベースSQL Database Standard and Basic Tiers requires the SQL データベースSQL Database admin account.

解説Remarks

オプションを設定します。Set Options

同じコンパイル済みプランのコピーがの値だけが異なる場合があります、 set_options列です。Copies of the same compiled plan might differ only by the value in the set_options column. これは、異なる接続では、同じクエリに対して異なる SET オプション セットが使用されていることを示します。This indicates that different connections are using different sets of SET options for the same query. 通常、異なるオプション セットを使用することは望ましくありません。異なるオプション セットを使用すると、余分なコンパイルが発生し、プランの再利用が減少して、キャッシュ内にプランの複数のコピーが存在することが原因でプラン キャッシュが増加します。Using different sets of options is usually undesirable because it can cause extra compilations, less plan reuse, and plan cache inflation because of multiple copies of plans in the cache.

SET オプションの評価Evaluating Set Options

戻り値を変換するset_optionsプランをコンパイルしたオプション、減算の値をset_optionsするまで、最大値で始まる値0 に到達します。To translate the value returned in set_options to the options with which the plan was compiled, subtract the values from the set_options value, starting with the largest possible value, until you reach 0. 減算する各値は、クエリ プランに使用されたオプションに対応しています。Each value you subtract corresponds to an option that was used in the query plan. たとえば場合の値set_options 251 では、プランをコンパイルしたオプションは ANSI_NULL_DFLT_ON (128)、QUOTED_IDENTIFIER (64)、ANSI_NULLS(32)、ANSI_WARNINGS (16)、CONCAT_NULL_YIELDS_NULL (8)、並列 Plan(2)ANSI_PADDING (1)。For example, if the value in set_options is 251, the options the plan was compiled with are ANSI_NULL_DFLT_ON (128), QUOTED_IDENTIFIER (64), ANSI_NULLS(32), ANSI_WARNINGS (16), CONCAT_NULL_YIELDS_NULL (8), Parallel Plan(2) and ANSI_PADDING (1).

オプションOption Value
ANSI_PADDINGANSI_PADDING 11
Parallel PlanParallel Plan 22
FORCEPLANFORCEPLAN 44
CONCAT_NULL_YIELDS_NULLCONCAT_NULL_YIELDS_NULL 88
ANSI_WARNINGSANSI_WARNINGS 1616
ANSI_NULLSANSI_NULLS 3232
QUOTED_IDENTIFIERQUOTED_IDENTIFIER 6464
ANSI_NULL_DFLT_ONANSI_NULL_DFLT_ON 128128
ANSI_NULL_DFLT_OFFANSI_NULL_DFLT_OFF 256256
NoBrowseTableNoBrowseTable

プランが FOR BROWSE 操作の実装に作業テーブルを使用しないことを示します。Indicates that the plan does not use a work table to implement a FOR BROWSE operation.
512512
TriggerOneRowTriggerOneRow

AFTER トリガー デルタ テーブルに対する 1 行の最適化がプランに含まれていることを示します。Indicates that the plan contains single row optimization for AFTER trigger delta tables.
10241024
ResyncQueryResyncQuery

クエリが内部システム ストアド プロシージャによって送信されたことを示します。Indicates that the query was submitted by internal system stored procedures.
20482048
ARITH_ABORTARITH_ABORT 40964096
NUMERIC_ROUNDABORTNUMERIC_ROUNDABORT 81928192
DATEFIRSTDATEFIRST 1638416384
DATEFORMATDATEFORMAT 3276832768
LanguageIDLanguageID 6553665536
UPONUPON

プランがコンパイルされたとき、データベース オプション PARAMETERIZATION が FORCED に設定されたことを示します。Indicates that the database option PARAMETERIZATION was set to FORCED when the plan was compiled.
131072131072
ROWCOUNTROWCOUNT 適用対象: SQL Server 2012SQL Server 2012SQL Server 2017SQL Server 2017Applies To: SQL Server 2012SQL Server 2012 to SQL Server 2017SQL Server 2017

262144262144

カーソルCursors

非アクティブなカーソルは、カーソルの格納に使用されたメモリをカーソルの同時ユーザーが再利用できるように、コンパイル済みプランにキャッシュされます。Inactive cursors are cached in a compiled plan so that the memory used to store the cursor can be reused by concurrent users of cursors. たとえば、カーソルの割り当てを解除せずに、バッチでそのカーソルを宣言して使用するとします。For example, suppose that a batch declares and uses a cursor without deallocating it. 2 人のユーザーが同じバッチを実行している場合、アクティブなカーソルが 2 つになります。If there are two users executing the same batch, there will be two active cursors. (場合によっては別のバッチで) カーソルの割り当てが解除されると、カーソルの格納に使用されたメモリはキャッシュされ、解放されません。Once the cursors are deallocated (potentially in different batches), the memory used to store the cursor is cached and not released. この非アクティブなカーソルの一覧は、コンパイル済みプランに保持されます。This list of inactive cursors is kept in the compiled plan. 次にユーザーがバッチを実行するときに、キャッシュされたカーソルのメモリが再利用され、アクティブなカーソルとして適切に初期化されます。The next time a user executes the batch, the cached cursor memory will be reused and initialized appropriately as an active cursor.

カーソル オプションの評価Evaluating Cursor Options

戻り値を変換するrequired_cursor_optionsacceptable_cursor_optionsプランをコンパイルしたオプションにするには、以降で、列の値から値を減算最大有効値を 0 に到達するまでです。To translate the value returned in required_cursor_options and acceptable_cursor_options to the options with which the plan was compiled, subtract the values from the column value, starting with the largest possible value, until you reach 0. 減算する各値は、クエリ プランに使用されたカーソル オプションに対応しています。Each value you subtract corresponds to a cursor option that was used in the query plan.

オプションOption Value
なしNone 00
INSENSITIVEINSENSITIVE 11
SCROLLSCROLL 22
READ ONLYREAD ONLY 44
FOR UPDATEFOR UPDATE 88
LOCALLOCAL 1616
GLOBALGLOBAL 3232
FORWARD_ONLYFORWARD_ONLY 6464
KEYSETKEYSET 128128
DYNAMICDYNAMIC 256256
SCROLL_LOCKSSCROLL_LOCKS 512512
OPTIMISTICOPTIMISTIC 10241024
STATICSTATIC 20482048
FAST_FORWARDFAST_FORWARD 40964096
IN PLACEIN PLACE 81928192
Select_statementFOR select_statement 1638416384

使用例Examples

A.A. 特定のプランの属性を返すReturning the attributes for a specific plan

次の例では、指定したプランのすべてのプラン属性を返します。The following example returns all plan attributes for a specified plan. sys.dm_exec_cached_plans動的管理ビューが最初に指定したプランのプラン ハンドルを取得するクエリが実行されます。The sys.dm_exec_cached_plans dynamic management view is queried first to obtain the plan handle for the specified plan. 2 番目のクエリでは、置換<plan_handle>プランで最初のクエリから値を処理します。In the second query, replace <plan_handle> with a plan handle value from the first query.

SELECT plan_handle, refcounts, usecounts, size_in_bytes, cacheobjtype, objtype   
FROM sys.dm_exec_cached_plans;  
GO  
SELECT attribute, value, is_cache_key  
FROM sys.dm_exec_plan_attributes(<plan_handle>);  
GO  

B.B. コンパイル済みプランの SET オプションとキャッシュされたプランの SQL ハンドルを返すReturning the SET options for compiled plans and the SQL handle for cached plans

次の例では、各プランをコンパイルしたオプションを示す値を返します。The following example returns a value representing the options that each plan was compiled with. さらに、キャッシュされたすべてのプランの SQL ハンドルが返されます。In addition, the SQL handle for all the cached plans is returned.

SELECT plan_handle, pvt.set_options, pvt.sql_handle  
FROM (  
    SELECT plan_handle, epa.attribute, epa.value   
    FROM sys.dm_exec_cached_plans   
        OUTER APPLY sys.dm_exec_plan_attributes(plan_handle) AS epa  
    WHERE cacheobjtype = 'Compiled Plan') AS ecpa   
PIVOT (MAX(ecpa.value) FOR ecpa.attribute IN ("set_options", "sql_handle")) AS pvt;  
GO  

参照See Also

動的管理ビューと動的管理関数 (Transact-SQL) Dynamic Management Views and Functions (Transact-SQL)
実行関連の動的管理ビューおよび関数 (TRANSACT-SQL と #41 です。 Execution Related Dynamic Management Views and Functions (Transact-SQL)
sys.dm_exec_cached_plans (Transact-SQL) sys.dm_exec_cached_plans (Transact-SQL)
sys.databases (Transact-SQL) sys.databases (Transact-SQL)
sys.objects (です。TRANSACT-SQL と #41 です。sys.objects (Transact-SQL)