sys.dm_exec_plan_attributes (Transact-SQL)
针对计划句柄所指定计划的每个计划属性返回一行。 可以使用此表值函数获取有关特定计划的详细信息,例如计划的缓存键值或当前同步执行次数。
备注
一些通过此函数返回的信息映射到 sys.syscacheobjects 向后兼容视图。
适用范围:SQL Server(SQL Server 2008 到当前版本)。 |
语法
sys.dm_exec_plan_attributes ( plan_handle )
参数
- plan_handle
用于唯一标识已执行并且其计划驻留在计划缓存中的批处理的查询计划。 plan_handle 的数据类型为 varbinary(64)。 计划句柄可以从 sys.dm_exec_cached_plans 动态管理视图获得。
返回的表
列名 |
数据类型 |
说明 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
属性 |
varchar(128) |
与此计划关联的属性的名称。 下列项之一:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
value |
sql_variant |
与此计划关联的属性的值。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
is_cache_key |
bit |
指示此属性是否用作计划的缓存查找密钥的一部分。 |
权限
要求对服务器拥有 VIEW SERVER STATE 权限。
注释
Set 选项
相同编译计划的副本可能只有 set_options 列中的值不同。 这说明不同的连接为相同的查询使用不同的 SET 选项集。 通常不希望使用不同的选项集,因为这可能导致额外的编译工作、减少计划重用并由于缓存中的多个计划副本而导致计划缓存膨胀。
计算 Set 选项
若要将 set_options 中返回的值转换为编译计划时所用的选项,请用该 set_options 值减去这些值,从最大值开始,直到结果为 0。 所减去的每个值对应于查询计划中所用的一个选项。 例如,如果 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 触发器 delta 表的单行优化。 |
1024 |
ResyncQuery 指示查询由内部系统存储过程提交。 |
2048 |
ARITH_ABORT |
4096 |
NUMERIC_ROUNDABORT |
8192 |
DATEFIRST |
16384 |
DATEFORMAT |
32768 |
LanguageID |
65536 |
UPON 指示编译计划时数据库选项 PARAMETERIZATION 设置为 FORCED。 |
131072 |
ROWCOUNT |
适用范围:SQL Server 2012 到 SQL Server 2014 262144 |
游标
不活动游标缓存在编译的计划中,以便游标的并发用户可以重用存储游标所使用的内存。 例如,假设某批处理声明并使用了一个游标,但未释放该游标。 如果有两个用户执行同一个批处理,将有两个活动游标。 游标释放(可能在不同批处理中)后,用于存储该游标的内存就会缓存但不释放。 此不活动游标列表保存在编译的计划中。 下次用户执行该批处理时,缓存的游标内存将重用并相应地初始化为活动游标。
计算游标选项
若要将 required_cursor_options 和 acceptable_cursor_options 中返回的值转换为编译计划时所用的选项,请用列值减去这些值,从最大值开始,直到结果为 0。 所减去的每个值对应于查询计划中所用的一个游标选项。
选项 |
值 |
---|---|
无 |
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 动态管理视图以获得指定计划的计划句柄。 在第二次查询中,用第一次查询中的计划句柄值替换 <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)