sys.dm_exec_cursors (Transact-SQL)

Aplica-se a: SQL Server

Devolve informações sobre os cursores que estão abertos em várias bases de dados.

Sintaxe

  
dm_exec_cursors (session_id | 0 )  

Arguments

session_id | 0
ID da sessão. Se session_id for especificado, esta função devolve informação sobre os cursores na sessão especificada.

Se 0 for especificado, a função devolve informação sobre todos os cursores para todas as sessões.

Tabela retornada

Nome da coluna Tipo de dados Descrição
session_id int ID da sessão que contém este cursor.
cursor_id int ID do objeto cursor.
name nvarchar(256) Nome do cursor conforme definido pelo utilizador.
propriedades 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
Concorrência do cursor
Escopo do cursor
Nível de aninhamento do cursor

Por exemplo, o valor devolvido nesta coluna pode ser "TSQL | Dinâmica | Otimista | Global (0)".
sql_handle varbinary(64) Handle para o texto do lote que declarou o cursor.
statement_start_offset int Número de caracteres no procedimento em lote ou armazenado em execução em que a instrução em execução está a ser iniciada. Pode ser usado em conjunto com o sql_handle, o statement_end_offsete a função de gerenciamento dinâmico sys.dm_exec_sql_text para recuperar a instrução atualmente em execução para a solicitação.
statement_end_offset int Número de caracteres no batch ou procedimento armazenado em execução atual onde termina a instrução em execução. Pode ser usado em conjunto com o sql_handle, o statement_start_offsete a função de gerenciamento dinâmico sys.dm_exec_sql_text para recuperar a instrução atualmente em execução 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 recompilação.
creation_time data e hora Carimbo temporal em que este cursor foi criado.
is_open bit Especifica se o cursor está aberto.
is_async_population bit Especifica se o thread em segundo plano ainda está a preencher assíncronamente um cursor KEYSET ou STATIC.
is_close_on_commit bit Especifica se o cursor foi declarado usando CURSOR_CLOSE_ON_COMMIT.

1 = O cursor será fechado quando a transação terminar.
fetch_status int Devolve o estado de última busca do cursor. Este é o último valor @@FETCH_STATUS devolvido.
fetch_buffer_size int Devolve informação sobre o tamanho do buffer de busca.

1 = Transact-SQL cursores. Isto pode ser definido para um valor mais alto para os cursores da API.
fetch_buffer_start int Para cursores FAST_FORWARD e DINÂMICOS, devolve 0 se o cursor não estiver aberto ou se estiver posicionado antes da primeira linha. Caso contrário, devolve -1.

Para cursores STATIC e KEYSET, devolve 0 se o cursor não estiver aberto, e -1 se estiver posicionado para além da última linha.

Caso contrário, devolve o número da linha em que está posicionado.
ansi_position int Posição do cursor dentro do buffer de busca.
worker_time bigint Tempo passado, em microssegundos, pelos trabalhadores a executar este cursor.
Leituras bigint Número de leituras realizadas pelo cursor.
escreve bigint Número de escritas realizadas pelo cursor.
dormant_duration bigint Milissegundos desde que a última consulta (abrir ou buscar) neste cursor foi iniciada.

Permissions

Requer VIEW permissão de ESTADO DO SERVIDOR no servidor.

Permissões para SQL Server 2022 e posterior

Requer VIEW permissão ESTADO DE DESEMPENHO DO SERVIDOR no servidor.

Remarks

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

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

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

Tipo Descrição
Conjunto de teclas O cursor foi declarado como Keyset.
Dynamic O cursor foi declarado como Dinâmico.
Instantâneo O cursor foi declarado como Snapshot ou Static.
Fast_Forward O cursor foi declarado como Avanço Rápido.

A tabela seguinte fornece informações sobre a concorrência do cursor e inclui os valores possíveis para a coluna de propriedades.

Concurrency Descrição
Somente leitura O cursor foi declarado apenas de leitura.
Fechaduras de Scroll O cursor usa bloqueios de scroll.
Otimista O cursor utiliza controlo de concorrência otimista.

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

Scope Descrição
Local Especifica que o escopo do cursor é local para o batch, procedimento armazenado ou trigger em que o cursor foi criado.
Global Especifica que o escopo do cursor é global para a ligação.

Exemplos

A. Deteção de cursores antigos

Este exemplo devolve informações sobre cursores que estiveram abertos no servidor há mais tempo do que o tempo especificado de 36 horas.

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  

Ver também

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