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)