sys.dm_exec_cursors (Transact-SQL)

Aplica-se a:SQL Server

Retorna informações sobre os cursores que estão abertos em vários bancos de dados.

Sintaxe

  
dm_exec_cursors (session_id | 0 )  

Argumentos

session_id | 0
ID da sessão. Se session_id for especificado, essa função retornará informações sobre cursores na sessão especificada.

Se 0 for especificado, esta função retornará informações sobre todos os cursores em todas as sessões.

Tabela retornada

Nome da coluna Tipo de dados Descrição
session_id int ID da sessão que detém o cursor.
cursor_id int ID do objeto do cursor.
name nvarchar(256) Nome do cursor como definido pelo usuário.
properties nvarchar(256) Especifica as propriedades do cursor. Os valores das seguintes propriedades são concatenados para formar o valor desta coluna:
Interface de declaração
Tipo de cursor
Simultaneidade de cursores
Escopo do cursor
Nível de aninhamento do cursor

Por exemplo, o valor retornado nesta coluna pode ser "TSQL | Dynamic | Optimistic | Global (0)".
sql_handle varbinary(64) Identificador do texto do lote que declarou o cursor.
statement_start_offset int Número de caracteres no procedimento em lote ou armazenado atualmente em execução no qual a instrução atualmente em execução se inicia. Pode ser usado junto com o sql_handle, o statement_end_offset e a função de gerenciamento dinâmico sys.dm_exec_sql_text para recuperar a instrução em execução no momento para a solicitação.
statement_end_offset int Número de caracteres no procedimento em lote ou armazenado atualmente em execução no qual a instrução atualmente em execução termina. Pode ser usado junto com o sql_handle, o statement_start_offset e a função de gerenciamento dinâmico sys.dm_exec_sql_text para recuperar a instrução em execução no momento para a solicitação.
plan_generation_num bigint Um número de sequência que pode ser usado para distinguir entre instâncias de planos após uma recompilação.
creation_time datetime Carimbo de data e hora da criação do cursor.
is_open bit Especifica se o cursor está aberto.
is_async_population bit Especifica se o thread em segundo plano ainda está populando assincronamente um cursor KEYSET ou STATIC.
is_close_on_commit bit Especifica se o cursor foi declarado por meio de CURSOR_CLOSE_ON_COMMIT.

1 = O cursor será fechado quando a transação terminar.
Fetch_status int Retorna o último status de busca do cursor. Trata-se do último valor de @@FETCH_STATUS retornado.
fetch_buffer_size int Retorna informações sobre o tamanho do buffer de busca.

1 = Cursores Transact-SQL. Pode ser definido como um valor mais alto para cursores de API.
fetch_buffer_start int No caso dos cursores FAST_FORWARD e DYNAMIC, retornará 0 se o cursor não estiver aberto ou se for posicionado antes da primeira linha. Caso contrário, ele retornará -1.

No caso dos cursores STATIC e KEYSET, retornará 0, se o cursor não estiver aberto, e -1, se o cursor for posicionado antes da primeira linha.

Caso contrário, retorna o número da linha onde está posicionado.
ansi_position int Posição de cursor dentro do buffer de busca.
worker_time bigint Tempo gasto, em microssegundos, pelos trabalhados que executam este cursor.
reads bigint Número de leituras executadas pelo cursor.
writes bigint Número de gravações executadas pelo cursor.
dormant_duration bigint Milissegundos desde o início da última consulta (aberta ou de busca) neste cursor.

Permissões

, é necessário ter permissão VIEW SERVER STATE no servidor.

Permissões para SQL Server 2022 e posterior

Requer a permissão VIEW SERVER PERFORMANCE STATE no servidor.

Comentários

A tabela a seguir fornece informações sobre a interface de declaração de cursor e inclui os valores possíveis para a coluna de propriedades.

Propriedade Descrição
API O cursor foi declarado usando uma das APIs de acesso a dados (ODBC, OLEDB).
TSQL O cursor foi declarado usando a sintaxe DECLARE CURSOR de Transact-SQL.

A tabela a seguir fornece informações sobre o tipo de cursor e inclui os valores possíveis para a coluna de propriedades.

Type Descrição
Keyset O cursor foi declarado como Keyset (conjunto de chaves).
Dinâmico O cursor foi declarado como Dynamic (dinâmico).
Instantâneo O cursor foi declarado como Snapshot (instantâneo) ou Static (estático).
Fast_Forward O cursor foi declarado como Fast Forward (avanço rápido).

A tabela a seguir fornece informações sobre o tipo de simultaneidade de cursores e inclui os valores possíveis para a coluna de propriedades.

Simultaneidade Description
Somente leitura O cursor foi declarado como somente leitura.
Scroll Locks O cursor usa bloqueios de rolagem.
Otimistas O cursor usa controle de simultaneidade otimista.

A tabela a seguir fornece informações sobre o tipo de escopo de cursor e inclui os valores possíveis para a coluna de propriedades.

Escopo Descrição
Local Especifica que o escopo do cursor é local para o lote, procedimento armazenado ou gatilho no qual o cursor foi criado.
Global Especifica que o escopo do cursor é global para a conexão.

Exemplos

a. Detectando cursores antigos

Este exemplo retorna informações sobre cursores que estiveram abertos no servidor por mais tempo que as 36 horas especificadas.

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  

Consulte Também

Exibições e funções de gerenciamento dinâmico (Transact-SQL)
Funções e exibições de gerenciamento dinâmico relacionadas à execução (Transact-SQL)
sys.dm_exec_sessions (Transact-SQL)