sys.dm_exec_plan_attributes (Transact-SQL)
プラン ハンドルで指定したプランのプラン属性ごとに 1 行のデータを返します。 このテーブル値関数を使用すると、キャッシュ キーの値やプランの同時実行数など、特定のプランに関する詳細情報を取得できます。
注 |
---|
この関数によって返される情報には、旧バージョンと互換性のある sys.syscacheobjects ビューにマップされるものもあります。 |
構文
sys.dm_exec_plan_attributes ( plan_handle )
引数
- plan_handle
既に実行されていて、そのプランがプラン キャッシュに格納されているバッチのクエリ プランを一意に識別します。 plan_handle のデータ型は varbinary(64) です。 プラン ハンドルは、sys.dm_exec_cached_plans 動的管理ビューから取得できます。
返されるテーブル
列名 |
データ型 |
説明 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
attribute |
varchar(128) |
このプランに関連付けられている属性の名前。 次のいずれかです。
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
value |
sql_variant |
プランに関連付けられている属性の値。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
is_cache_key |
bit |
属性が、プランに対するキャッシュ参照キーの一部として使用されているかどうかを示します。 |
権限
サーバーに対する VIEW SERVER STATE 権限が必要です。
説明
SET オプション
同一のコンパイル済みプランのコピーでは、set_options 列の値のみが異なる場合があります。 これは、異なる接続では、同じクエリに対して異なる SET オプション セットが使用されていることを示します。 通常、異なるオプション セットを使用することは望ましくありません。異なるオプション セットを使用すると、余分なコンパイルが発生し、プランの再利用が減少して、キャッシュ内にプランの複数のコピーが存在することが原因でプラン キャッシュが増加します。
SET オプションの評価
set_options に返された値を、プランをコンパイルしたオプションに変換するには、最も大きいと考えられる値から順に 0 に到達するまで、set_options の値からその値を減算します。 減算する各値は、クエリ プランに使用されたオプションに対応しています。 たとえば、set_options の値が 251 の場合、プランをコンパイルしたオプションは、ANSI_NULL_DFLT_ON (128)、QUOTED_IDENTIFIER (64)、ANSI_NULLS(32)、ANSI_WARNINGS (16)、CONCAT_NULL_YIELDS_NULL (8)、Parallel Plan(2)、および ANSI_PADDING (1) になります。
オプション |
値 |
---|---|
ANSI_PADDING |
1 |
Parallel Plan |
2 |
FORCEPLAN |
4 |
CONCAT_NULL_YIELDS_NULL |
8 |
ANSI_WARNINGS |
16 |
ANSI_NULLS |
32 |
QUOTED_IDENTIFIER |
64 |
ANSI_NULL_DFLT_ON |
128 |
ANSI_NULL_DFLT_OFF |
256 |
NoBrowseTable プランが FOR BROWSE 操作の実装に作業テーブルを使用しないことを示します。 |
512 |
TriggerOneRow AFTER トリガー デルタ テーブルに対する 1 行の最適化がプランに含まれていることを示します。 |
1024 |
ResyncQuery クエリが内部システム ストアド プロシージャによって送信されたことを示します。 |
2048 |
ARITH_ABORT |
4096 |
NUMERIC_ROUNDABORT |
8192 |
DATEFIRST |
16384 |
DATEFORMAT |
32768 |
LanguageID |
65536 |
UPON プランがコンパイルされたとき、データベース オプション PARAMETERIZATION が FORCED に設定されたことを示します。 |
131072 |
カーソル
非アクティブなカーソルは、カーソルの格納に使用されたメモリをカーソルの同時ユーザーが再利用できるように、コンパイル済みプランにキャッシュされます。 たとえば、カーソルの割り当てを解除せずに、バッチでそのカーソルを宣言して使用するとします。 2 人のユーザーが同じバッチを実行している場合、アクティブなカーソルが 2 つになります。 (場合によっては別のバッチで) カーソルの割り当てが解除されると、カーソルの格納に使用されたメモリはキャッシュされ、解放されません。 この非アクティブなカーソルの一覧は、コンパイル済みプランに保持されます。 次にユーザーがバッチを実行するときに、キャッシュされたカーソルのメモリが再利用され、アクティブなカーソルとして適切に初期化されます。
カーソル オプションの評価
required_cursor_options および acceptable_cursor_options に返された値を、プランをコンパイルしたオプションに変換するには、最も大きいと考えられる値から順に 0 に到達するまで、列の値からその値を減算します。 減算する各値は、クエリ プランに使用されたカーソル オプションに対応しています。
オプション |
値 |
---|---|
None |
0 |
INSENSITIVE |
1 |
SCROLL |
2 |
READ ONLY |
4 |
FOR UPDATE |
8 |
LOCAL |
16 |
GLOBAL |
32 |
FORWARD_ONLY |
64 |
KEYSET |
128 |
DYNAMIC |
256 |
SCROLL_LOCKS |
512 |
OPTIMISTIC |
1024 |
STATIC |
2048 |
FAST_FORWARD |
4096 |
IN PLACE |
8192 |
FOR select_statement |
16384 |
使用例
A. 特定のプランの属性を返す
次の例では、指定したプランのすべてのプラン属性を返します。 最初に、sys.dm_exec_cached_plans 動的管理ビューに対してクエリを実行し、指定したプランのプラン ハンドルを取得します。 2 番目のクエリでは、<plan_handle> を最初のクエリで取得したプラン ハンドルの値に置き換えます。
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. コンパイル済みプランの SET オプションとキャッシュされたプランの SQL ハンドルを返す
次の例では、各プランをコンパイルしたオプションを示す値を返します。 さらに、キャッシュされたすべてのプランの SQL ハンドルが返されます。
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
関連項目
参照
実行関連の動的管理ビューおよび関数 (Transact-SQL)