sys.dm_exec_plan_attributes

更新日期: 2006 年 12 月 12 日

针对计划句柄所指定计划的每个计划属性返回一行。可以使用此表值函数获取有关特定计划的详细信息,例如计划的缓存键值或当前同步执行次数。

ms189472.note(zh-cn,SQL.90).gif注意:
一些通过此函数返回的信息映射到 sys.syscacheobjects 向后兼容视图。

语法

sys.dm_exec_plan_attributes (plan_handle)

参数

  • plan_handle
    为已执行且计划位于计划缓存中的批处理唯一标识查询计划。plan_handle 的数据类型为 varbinary(64)。计划句柄可以从 sys.dm_exec_cached_plans 动态管理视图获得。

返回的表

列名

数据类型

说明

attribute

varchar(128)

与此计划关联的属性的名称。下列类型之一:

属性

数据类型

说明

set_optionsint指示编译计划所使用的选项值。

objectidint用于在缓存中查找对象的主键之一。这是存储在数据库对象(过程、视图、触发器等)的 sys.objects 中的对象 ID。对于类型为“即席”或“已准备好”的计划,它是批处理文本的内部哈希。

dbidint是我们为其进行计划的实体所驻留的数据库的 ID。对于即席计划或已准备好的计划,它是执行批处理的数据库 ID。

dbid_executeint对于存储在 Resource 数据库的系统对象,是执行缓存计划的数据库 ID。对于所有其他情况,均为 0。

user_idint包含对象的架构的 ID。值 -2 指示提交的批处理不依赖于隐式名称解析并可在不同的用户间共享。这是首选方法。

language_idsmallint创建缓存对象的连接的语言 ID。有关详细信息,请参阅 sys.syslanguages (Transact-SQL)

date_formatsmallint创建缓存对象的连接的日期格式。有关详细信息,请参阅 SET DATEFORMAT (Transact-SQL)

date_firsttinyint第一个日期值。有关详细信息,请参阅 SET DATEFIRST (Transact-SQL)

statusint缓存查找密钥中的内部状态位。

required_cursor_optionsint用户指定的游标选项,例如游标类型。

acceptable_cursor_optionsint为了支持语句的执行,SQL Server 可以隐式转换采用的游标选项。例如,用户可能指定一个动态游标,但允许查询优化器将此游标类型转换为静态游标。有关详细信息,请参阅使用隐式游标转换

inuse_exec_contextint使用查询计划并且当前正在执行的批处理的数目。 有关执行上下文和查询计划的详细信息,请参阅执行计划的缓存和重新使用

free_exec_contextint当前未使用的查询计划的缓存执行上下文数目。

hits_exec_contextint从计划缓存获取执行上下文并重用从而节省 SQL 语句编译开销的次数。该值是目前所有批处理执行的聚合。

misses_exec_contextint无法在计划缓存中找到执行上下文而导致为批处理执行创建新的执行上下文的次数。

removed_exec_contextint由于缓存计划的内存压力而删除的执行上下文数目。

inuse_cursorsint包含一个或多个使用缓存计划的游标的当前正在执行的批数。

free_cursorsint缓存计划的空闲或可用游标数。

hits_cursorsint从缓存计划获得不活动游标并重用的次数。该值是目前所有批处理执行的聚合。

misses_cursorsint无法在缓存中找到不活动游标的次数。

removed_cursorsint由于缓存计划的内存压力而删除的游标数。

sql_handlevarbinary(64)批处理的 SQL 句柄。

value

sql_variant

与此计划关联的属性的值。

is_cache_key

bit

指示此属性是否用作计划的缓存查找密钥的一部分。

备注

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 和 INSTEAD OF 触发器的单行优化。也就是说,如果 inserteddeleted 表中只有一行受到影响,则设置此选项。适用于执行进程内数据访问的 Transact-SQL 触发器和 CLR 触发器。

1024

ResyncQuery

指示查询由内部系统存储过程提交。

2048

ARITH_ABORT

4096

NUMERIC_ROUNDABORT

8192

DATEFIRST

16384

DATEFORMAT

32768

LanguageID

65536

UPON

指示编译计划时数据库选项 PARAMETERIZATION 设置为 FORCED。

131072

游标

不活动游标缓存在编译的计划中,以便游标的并发用户可以重用存储游标所使用的内存。例如,假设某批处理声明并使用了一个游标,但未释放该游标。如果有两个用户执行同一个批处理,将有两个活动游标。游标释放(可能在不同批处理中)后,用于存储该游标的内存就会缓存但不释放。此不活动游标列表保存在编译的计划中。下次用户执行该批处理时,缓存的游标内存将重用并相应地初始化为活动游标。

计算游标选项

若要将 required_cursor_optionsacceptable_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

权限

需要对服务器拥有 VIEW SERVER STATE 权限。

示例

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 文本和 SQL 句柄。

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

请参阅

参考

动态管理视图和函数
与执行有关的动态管理视图和函数
sys.dm_exec_cached_plans
sys.databases (Transact-SQL)
sys.objects (Transact-SQL)

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

发布日期 历史记录

2006 年 12 月 12 日

新增内容:
  • Attribute 列中列出了返回的属性。
  • 添加了“备注”和“示例”部分。