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


sys.dm_exec_cursors (Transact-SQL)

Область применения: SQL Server

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

Синтаксис

  
dm_exec_cursors (session_id | 0 )  

Аргументы

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

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

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

Имя столбца Тип данных Description
session_id int Идентификатор сеанса, содержащего курсор.
cursor_id int Идентификатор курсора.
name nvarchar(256) Имя курсора, определенное пользователем.
properties nvarchar(256) Указывает свойства курсора. Для образования значения этого столбца объединены значения следующих свойств:
интерфейс объявления;
Тип курсора
параллелизм курсора;
область курсора;
уровень вложенности курсора.

Например, значение, возвращаемое в этом столбце, может быть "TSQL | Dynamic | Оптимистичный | 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 Время в миллисекундах, потраченное на обработку данного курсора.
Читает bigint Количество операций чтения, выполненных курсором.
Пишет bigint Количество операций записи, выполненных курсором.
dormant_duration bigint Количество миллисекунд, прошедшее с момента запуска последнего запроса на открытие или на выборку.

Разрешения

необходимо разрешение VIEW SERVER STATE на сервере.

Разрешения для SQL Server 2022 и более поздних версий

Требуется разрешение VIEW SERVER PERFORMANCE STATE на сервере.

Замечания

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

Свойство Description
API Курсор был объявлен с помощью одной из API-функций для доступа к данным (ODBC, OLEDB).
TSQL Курсор был объявлен с помощью инструкции DECLARE_CURSOR языка Transact-SQL.

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

Тип Описание
Keyset Курсор был объявлен с типом Keyset.
Динамический Курсор был объявлен с типом Dynamic.
Снимок Курсор был объявлен с типом Snapshot или Static.
Fast_Forward Курсор был объявлен с типом Fast Forward.

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

Параллелизм Description
Только для чтения Курсор был объявлен в режиме только для чтения.
Scroll Locks Курсор использует блокирование прокрутки.
Optimistic Курсор использует управление оптимистичным параллелизмом.

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

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

Примеры

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

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

См. также

Динамические административные представления и функции (Transact-SQL)
Связанные с выполнением динамические административные представления и функции (Transact-SQL)
sys.dm_exec_sessions (Transact-SQL)