Поделиться через


sys.dm_exec_cursors

Возвращает сведения о курсорах, открытых в различных базах данных.

Синтаксис

dm_exec_cursors (session_id | 0 )

Аргументы

  • session_id | 0
    Идентификатор сеанса. Если аргумент session_id указан, функция возвращает сведения о курсорах в этом сеансе.

    Если указано значение 0, функция возвращает сведения обо всех курсорах для всех сеансов.

Возвращаемая таблица

Имя столбца

Тип данных

Описание

session_id

int

Идентификатор сеанса, содержащего курсор.

cursor_id

int

Идентификатор курсора.

name

nvarchar(256)

Имя курсора, определенное пользователем.

properties

nvarchar(256)

Указывает свойства курсора. Для образования значения этого столбца объединены значения следующих свойств:

  • интерфейс объявления;

  • тип курсора;

  • параллелизм курсора;

  • область курсора;

  • уровень вложенности курсора.

Например, возвращаемое в этот столбец значение может быть «TSQL | Dynamic | Optimistic | Global (0)».

sql_handle

varbinary(64)

Дескриптор текста пакета, в котором объявлен курсор.

statement_start_offset

int

Количество символов в выполняемом в настоящий момент пакете или хранимой процедуре, в которой запущена текущая инструкция. Вместе со значениями столбцов sql_handle и statement_start_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

Курсор был объявлен с помощью инструкции DECLARE_CURSOR языка Transact-SQL.

Следующая таблица содержит сведения о типе курсора и возможные значения для столбца свойств.

Тип

Описание

Keyset

Курсор был объявлен с типом Keyset.

Dynamic

Курсор был объявлен с типом Dynamic.

Snapshot

Курсор был объявлен с типом Snapshot или Static.

Fast_Forward

Курсор был объявлен с типом Fast Forward.

Следующая таблица содержит сведения о параллелизме курсоров и возможные значения для столбца свойств.

Параллелизм

Описание

Read Only

Курсор был объявлен в режиме только для чтения.

Scroll Locks

Курсор использует блокирование прокрутки.

Optimistic

Курсор использует управление оптимистичным параллелизмом.

Следующая таблица содержит сведения об области курсоров и возможные значения для столбца свойств.

Область

Описание

Local

Указывает, что курсор является локальным по отношению к пакету, хранимой процедуре или триггеру, в котором он был создан.

Global

Указывает, что курсор является глобальным по отношению к соединению.

Примеры

А. Обнаружение старых курсоров

В этом примере возвращаются сведения о курсорах, которые открыты на сервере дольше указанного времени, составляющего 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