다음을 통해 공유


sys.dm_exec_cursors(Transact-SQL)

다양한 데이터베이스에서 열려 있는 커서에 대한 정보를 반환합니다.

구문

dm_exec_cursors (session_id | 0 )

인수

  • session_id | 0
    세션의 ID입니다. session_id를 지정하고 이 함수를 호출하면 지정한 세션의 커서에 대한 정보가 반환됩니다.

    0을 지정하면 모든 세션의 모든 커서에 대한 정보가 반환됩니다.

반환된 테이블

열 이름

데이터 형식

설명

session_id

int

이 커서를 보유하는 세션의 ID입니다.

cursor_id

int

커서 개체의 ID입니다.

name

nvarchar(256)

사용자가 정의한 커서의 이름입니다.

properties

nvarchar(256)

커서의 속성을 지정합니다. 다음 속성의 값은 이 열의 값을 구성하도록 연결됩니다.

  • 선언 인터페이스

  • 커서 유형

  • 커서 동시성

  • 커서 범위

  • 커서 중첩 수준

예를 들어 이 열에서 반환된 값은 "TSQL | Dynamic | Optimistic | Global (0)"일 수 있습니다.

sql_handle

varbinary(64)

커서를 선언한 일괄 처리의 텍스트에 대한 핸들입니다.

statement_start_offset

int

현재 실행 중인 일괄 처리 또는 저장 프로시저에서 현재 실행 중인 문이 시작되는 위치까지의 문자 수입니다. sql_handle, statement_end_offsetsys.dm_exec_sql_text 동적 관리 함수와 함께 사용하여 요청에 대해 현재 실행 중인 문을 검색할 수 있습니다.

statement_end_offset

int

현재 실행 중인 일괄 처리 또는 저장 프로시저에서 현재 실행 중인 문이 종료되는 위치까지의 문자 수입니다. sql_handle, statement_start_offsetsys.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

이 커서를 실행하는 작업자가 사용한 시간(마이크로초)입니다.

reads

bigint

커서에 의해 수행된 읽기 수입니다.

writes

bigint

커서에 의해 수행된 쓰기 수입니다.

dormant_duration

bigint

이 커서에 대한 마지막 쿼리(열기 또는 인출)가 시작된 이후 경과한 시간(밀리초)입니다.

사용 권한

서버에 대한 VIEW SERVER STATE 권한이 필요합니다.

주의

다음 표에서는 커서 선언 인터페이스에 대한 정보를 제공하고 속성 열에 나올 수 있는 값을 보여 줍니다.

속성

설명

API

데이터 액세스 API(ODBC, OLEDB) 중 하나를 사용하여 커서가 선언되었습니다.

TSQL

Transact-SQL DECLARE CURSOR 구문을 사용하여 커서가 선언되었습니다.

다음 표에서는 커서 유형에 대한 정보를 제공하고 속성 열에 나올 수 있는 값을 보여 줍니다.

유형

설명

Keyset

키 집합 커서로 선언되었습니다.

Dynamic

동적 커서로 선언되었습니다.

Snapshot

스냅숏 또는 정적 커서로 선언되었습니다.

Fast_Forward

빠른 정방향 커서로 선언되었습니다.

다음 표에서는 커서 동시성에 대한 정보를 제공하고 속성 열에 나올 수 있는 값을 보여 줍니다.

동시성

설명

Read Only

커서가 읽기 전용으로 선언되었습니다.

Scroll Locks

커서가 스크롤 잠금을 사용합니다.

Optimistic

커서가 낙관적 동시성 제어를 사용합니다.

다음 표에서는 커서 범위에 대한 정보를 제공하고 속성 열에 나올 수 있는 값을 보여 줍니다.

범위

설명

Local

커서 범위를 커서가 생성된 일괄 처리, 저장 프로시저, 트리거에 대해 로컬로 지정합니다.

Global

커서 범위를 연결에 대해 전역으로 지정합니다.

1. 오래된 커서 검색

다음 예에서는 지정한 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