Compartilhar via


sys.dm_exec_cursors (Transact-SQL)

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, esta 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.

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

  • 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 a função de gerenciamento dinâmico sql_handle, statement_end_offset e sys.dm_exec_sql_text para recuperar a instrução atualmente em execução da 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 a função de gerenciamento dinâmico sql_handle, statement_start_offset e sys.dm_exec_sql_text para recuperar a instrução atualmente em execução da solicitação.

plan_generation_num

bigint

Um número de seqüê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, 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

Requer a permissão VIEW SERVER 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.

Tipo

Descrição

Keyset

O cursor foi declarado como Keyset (conjunto de chaves).

Dynamic

O cursor foi declarado como Dynamic (dinâmico).

Snapshot

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

Descrição

Read Only

O cursor foi declarado como somente leitura.

Scroll Locks

O cursor usa bloqueios de rolagem.

Optimistic

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