sys.dm_exec_cursors
返回有关在各种数据库中打开的游标的信息。
语法
dm_exec_cursors (session_id | 0 )
参数
session_id | 0
会话的 ID。如果指定了 session_id,则此函数返回有关指定会话中的游标信息。如果指定了 0,则此函数返回有关所有会话的所有游标的信息。
返回的表
列名 |
数据类型 |
说明 |
---|---|---|
session_id |
int |
持有此游标的会话 ID。 |
cursor_id |
int |
游标对象的 ID。 |
name |
nvarchar(256) |
用户定义的游标名称。 |
properties |
nvarchar(256) |
指定游标的属性。下列属性的值连在一起可构成此列的值:
例如,在此列中返回的值可能为 TSQL | Dynamic | Optimistic | Global (0)。 |
sql_handle |
varbinary(64) |
声明游标的批处理的文本句柄。 |
statement_start_offset |
int |
在当前正在执行的批处理或存储过程中,指示当前正在执行的语句开始位置的字符数。可以与 sql_handle、statement_end_offset 和 sys.dm_exec_sql_text 动态管理函数一起使用,以便为请求检索当前正在执行的语句。 |
statement_end_offset |
int |
在当前正在执行的批处理或存储过程中,指示当前正在执行的语句结束位置的字符数。可以与 sql_handle、statement_start_offset 和 sys.dm_exec_sql_text 动态管理函数一起使用,以便为请求检索当前正在执行的语句。 |
plan_generation_num |
bigint |
可用于在重新编译后区分不同计划实例的序列号。 |
creation_time |
datetime |
创建此游标时的时间戳。 |
is_open |
bit |
指定游标是否处于打开状态。 |
is_async_population |
bit |
指定后台线程是否仍异步填充 KEYSET 或 STATIC 游标。 |
is_close_on_commit |
bit |
指定是否使用 CURSOR_CLOSE_ON_COMMIT 声明游标。 1 = 事务结束时将关闭游标。 |
fetch_status |
int |
返回游标的上一提取状态。这是上次返回的 @@FETCH_STATUS 值。 |
fetch_buffer_size |
int |
返回有关提取缓冲区大小的信息。 1 = Transact-SQL 游标。对于 API 游标,可以将该参数设置为更高的值。 |
fetch_buffer_start |
int |
对于 FAST_FORWARD 和 DYNAMIC 游标,如果游标未打开或被放在第一行之前,则该参数返回 0。否则,返回 -1。 对于 STATIC 和 KEYSET 游标,如果游标未打开,则该参数返回 0;如果游标放在最后一行之外,则该参数返回 -1。 在其他情况下,该参数返回游标所在的行号。 |
ansi_position |
int |
游标在提取缓冲区中的位置。 |
worker_time |
bigint |
辅助线程执行此游标所用的时间(毫秒)。 |
reads |
bigint |
游标所执行的读取次数。 |
Writes |
bigint |
游标所执行的写入次数。 |
dormant_duration |
bigint |
自上次对此游标启动查询(打开或提取)以来所经过的时间(毫秒)。 |
权限
需要对服务器拥有 VIEW SERVER STATE 权限。
注释
下表提供了有关游标声明接口的信息,并列出了这些属性列的可能值。
属性 |
说明 |
---|---|
API |
使用一个数据访问 API(ODBC、OLEDB)声明游标。 |
TSQL |
使用 Transact-SQL DECLARE CURSOR 语法声明游标。 |
下表提供了有关游标类型的信息,并列出了这些属性列的可能值。
类型 |
说明 |
---|---|
Keyset |
将游标声明为键集。 |
Dynamic |
将游标声明为动态。 |
Snapshot |
将游标声明为快照或静态。 |
Fast_Forward |
将游标声明为快进。 |
下表提供了有关游标并发的信息,并列出了这些属性列的可能值。
并发 |
说明 |
---|---|
Read Only |
将游标声明为只读。 |
Scroll Locks |
游标使用滚动锁。 |
Optimistic |
游标使用乐观并发控制。 |
下表提供了有关游标范围的信息,并列出了这些属性列的可能值。
范围 |
说明 |
---|---|
Local |
指定该游标的范围对在其中创建它的批处理、存储过程或触发器是局部的。 |
Global |
指定该游标范围对连接是全局的。 |
示例
A. 检测旧游标
以下示例返回有关在服务器上打开时间超过指定时间(36 小时)的游标的信息。
SELECT creation_time, cursor_id, name, c.session_id, login_name
FROM sys.dm_exec_cursors(0) AS c
JOIN sys.dm_exec_sessions AS s ON c.session_id = s.session_id
WHERE DATEDIFF(hh, c.creation_time, GETDATE()) > 36;
GO