| title | sys.dm_exec_cursors (Transact-SQL) | Microsoft Docs | ||||
|---|---|---|---|---|---|
| ms.custom | |||||
| ms.date | 08/09/2016 | ||||
| ms.prod | sql | ||||
| ms.reviewer | |||||
| ms.technology | system-objects | ||||
| ms.topic | language-reference | ||||
| f1_keywords |
|
||||
| dev_langs |
|
||||
| helpviewer_keywords |
|
||||
| ms.assetid | f520b63c-36af-40f1-bf71-6901d6331d3d | ||||
| author | stevestein | ||||
| ms.author | sstein | ||||
| manager | craigg |
[!INCLUDEtsql-appliesto-ss2008-xxxx-xxxx-xxx-md]
Returns information about the cursors that are open in various databases.
dm_exec_cursors (session_id | 0 )
session_id | 0
ID of the session. If session_id is specified, this function returns information about cursors in the specified session.
If 0 is specified, the function returns information about all cursors for all sessions.
| Column name | Data type | Description |
|---|---|---|
| session_id | int | ID of the session that holds this cursor. |
| cursor_id | int | ID of the cursor object. |
| name | nvarchar(256) | Name of the cursor as defined by the user. |
| properties | nvarchar(256) | Specifies the properties of the cursor. The values of the following properties are concatenated to form the value of this column: Declaration Interface Cursor Type Cursor Concurrency Cursor scope Cursor nesting level For example, the value returned in this column might be "TSQL | Dynamic | Optimistic | Global (0)". |
| sql_handle | varbinary(64) | Handle to the text of the batch that declared the cursor. |
| statement_start_offset | int | Number of characters into the currently executing batch or stored procedure at which the currently executing statement starts. Can be used together with the sql_handle, the statement_end_offset, and the sys.dm_exec_sql_text dynamic management function to retrieve the currently executing statement for the request. |
| statement_end_offset | int | Number of characters into the currently executing batch or stored procedure at which the currently executing statement ends. Can be used together with the sql_handle, the statement_start_offset, and the sys.dm_exec_sql_text dynamic management function to retrieve the currently executing statement for the request. |
| plan_generation_num | bigint | A sequence number that can be used to distinguish between instances of plans after recompilation. |
| creation_time | datetime | Timestamp when this cursor was created. |
| is_open | bit | Specifies whether the cursor is open. |
| is_async_population | bit | Specifies whether the background thread is still asynchronously populating a KEYSET or STATIC cursor. |
| is_close_on_commit | bit | Specifies whether the cursor was declared by using CURSOR_CLOSE_ON_COMMIT. 1 = Cursor will be closed when the transaction ends. |
| fetch_status | int | Returns last fetch status of the cursor. This is the last returned @@FETCH_STATUS value. |
| fetch_buffer_size | int | Returns information about the size of the fetch buffer. 1 = Transact-SQL cursors. This can be set to a higher value for API cursors. |
| fetch_buffer_start | int | For FAST_FORWARD and DYNAMIC cursors, it returns 0 if the cursor is not open or if it is positioned before the first row. Otherwise, it returns -1. For STATIC and KEYSET cursors, it returns 0 if the cursor is not open, and -1 if the cursor is positioned beyond the last row. Otherwise, it returns the row number in which it is positioned. |
| ansi_position | int | Cursor position within the fetch buffer. |
| worker_time | bigint | Time spent, in microseconds, by the workers executing this cursor. |
| reads | bigint | Number of reads performed by the cursor. |
| writes | bigint | Number of writes performed by the cursor. |
| dormant_duration | bigint | Milliseconds since the last query (open or fetch) on this cursor was started. |
Requires VIEW SERVER STATE permission on the server.
The following table provides information about the cursor declaration interface and includes the possible values for the properties column.
| Property | Description |
|---|---|
| API | Cursor was declared by using one of the data access APIs (ODBC, OLEDB). |
| TSQL | Cursor was declared by using the Transact-SQL DECLARE CURSOR syntax. |
The following table provides information about the cursor type and includes the possible values for the properties column.
| Type | Description |
|---|---|
| Keyset | Cursor was declared as Keyset. |
| Dynamic | Cursor was declared as Dynamic. |
| Snapshot | Cursor was declared as Snapshot or Static. |
| Fast_Forward | Cursor was declared as Fast Forward. |
The following table provides information about cursor concurrency and includes the possible values for the properties column.
| Concurrency | Description |
|---|---|
| Read Only | Cursor was declared as read-only. |
| Scroll Locks | Cursor uses scroll locks. |
| Optimistic | Cursor uses optimistic concurrency control. |
The following table provides information about cursor scope and includes the possible values for the properties column.
| Scope | Description |
|---|---|
| Local | Specifies that the scope of the cursor is local to the batch, stored procedure, or trigger in which the cursor was created. |
| Global | Specifies that the scope of the cursor is global to the connection. |
This example returns information about cursors that have been open on the server longer than the specified time of 36 hours.
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
Dynamic Management Views and Functions (Transact-SQL)
Execution Related Dynamic Management Views and Functions (Transact-SQL)
sys.dm_exec_sessions (Transact-SQL)