다음을 통해 공유


sys.dm_exec_requests(Transact-SQL)

적용 대상: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW) Microsoft Fabric의 SQL 분석 엔드포인트 Microsoft Fabric의 웨어하우스

SQL Server에서 실행 중인 각 요청에 대한 정보를 반환합니다. 요청에 대한 자세한 내용은 스레드 및 태스크 아키텍처 가이드를 참조하세요.

참고 항목

Azure Synapse Analytics 또는 Analytics Platform System(PDW)의 전용 SQL 풀에서 호출하려면 sys.dm_pdw_exec_requests(Transact-SQL)를 참조하세요. 서버리스 SQL 풀 또는 Microsoft Fabric의 sys.dm_exec_requests경우 .

열 이름 데이터 형식 설명
session_id smallint 이 요청과 관련된 세션의 ID입니다. Null을 허용하지 않습니다.
request_id int 요청의 ID입니다. 세션의 컨텍스트에서 고유합니다. Null을 허용하지 않습니다.
start_time 날짜/시간 요청이 도착한 타임스탬프입니다. Null을 허용하지 않습니다.
status nvarchar(30) 요청의 상태입니다. 다음 값 중 하나일 수 있습니다.

백그라운드
rollback
실행 중
실행 가능
절전 상태
suspended

Null을 허용하지 않습니다.
command nvarchar(32) 처리 중인 명령의 현재 형식을 식별합니다. 일반 명령 유형에는 다음과 같은 값이 포함됩니다.

SELECT
INSERT
UPDATE
Delete
BACKUP LOG
BACKUP DATABASE
DBCC
FOR

요청에 해당하는 sql_handle 텍스트를 사용하여 sys.dm_exec_sql_text 요청 텍스트를 검색할 수 있습니다. 내부 시스템 프로세스는 수행하는 태스크 유형에 따라 명령을 설정합니다. 태스크에는 다음과 같은 값이 포함됩니다.

LOCK MONITOR
CHECKPOINTLAZY
WRITER

Null을 허용하지 않습니다.
sql_handle varbinary(64) 쿼리가 속하는 일괄 처리 또는 저장 프로시저를 고유하게 식별하는 토큰입니다. Nullable.
statement_start_offset int 현재 실행 중인 일괄 처리 또는 지속형 개체에 대해 현재 실행 중인 문의 시작 위치를 바이트 단위로 나타냅니다(0부터 시작). sql_handle, statement_end_offsetsys.dm_exec_sql_text 동적 관리 함수와 함께 사용하여 요청에 대해 현재 실행 중인 문을 검색할 수 있습니다. Nullable.
statement_end_offset int 현재 실행 중인 일괄 처리 또는 지속형 개체에 대해 현재 실행 중인 문의 종료 위치를 바이트 단위로 나타냅니다(0부터 시작). sql_handle, statement_start_offsetsys.dm_exec_sql_text 동적 관리 함수와 함께 사용하여 요청에 대해 현재 실행 중인 문을 검색할 수 있습니다. Nullable.
plan_handle varbinary(64) 현재 실행 중인 일괄 처리에 대한 쿼리 실행 계획을 고유하게 식별하는 토큰입니다. Nullable.
database_id smallint 요청이 실행되는 데이터베이스의 ID입니다. Null을 허용하지 않습니다.

Azure SQL Database에서 값은 단일 데이터베이스 또는 탄력적 풀 내에서 고유하지만 논리 서버 내에는 고유하지 않습니다.
user_id int 요청을 제출한 사용자의 ID입니다. Null을 허용하지 않습니다.
connection_id uniqueidentifier 요청이 도착한 연결의 ID입니다. Nullable.
blocking_session_id smallint 요청을 차단하는 세션의 ID입니다. 이 열이 NULL 있거나 0요청이 차단되지 않거나 차단 세션의 세션 정보를 사용할 수 없는 경우(또는 식별할 수 없음) 자세한 내용은 SQL Server 차단 문제 이해 및 해결을 참조하세요.

-2 = 차단 리소스는 분리된 분산 트랜잭션이 소유합니다.

-3 = 차단 리소스는 지연된 복구 트랜잭션에 의해 소유됩니다.

-4 = session_id 내부 래치 상태 전환으로 인해 현재 차단 래치 소유자를 확인할 수 없습니다.

-5 = session_id 이 래치 유형(예: SH 래치)에 대해 추적되지 않으므로 차단 래치 소유자를 확인할 수 없습니다.

그 자체로 성능 blocking_session_id -5 문제를 나타내지 않습니다. -5 는 세션이 비동기 작업을 완료하기 위해 대기 중임을 나타냅니다. 도입되기 전에는 -5 대기 상태에 있었음에도 불구하고 동일한 세션이 표시 blocking_session_id 0되었을 것입니다.

워크로드에 따라 관찰이 blocking_session_id = -5 자주 발생할 수 있습니다.
wait_type nvarchar(60) 요청이 현재 차단된 경우 이 열은 대기 유형을 반환합니다. Nullable.

대기 유형에 대한 자세한 내용은 sys.dm_os_wait_stats(Transact-SQL)를 참조하세요.
wait_time int 요청이 현재 차단된 경우 이 열은 현재 대기 기간을 밀리초 단위로 반환합니다. Null을 허용하지 않습니다.
last_wait_type nvarchar(60) 이 요청이 이전에 차단된 경우 이 열은 마지막 대기 유형을 반환합니다. Null을 허용하지 않습니다.
wait_resource nvarchar(256) 요청이 현재 차단된 경우 이 열은 요청이 현재 대기하고 있는 리소스를 반환합니다. Null을 허용하지 않습니다.
open_transaction_count int 이 요청에 대해 열려 있는 트랜잭션 수입니다. Null을 허용하지 않습니다.
open_resultset_count int 이 요청에 대해 열려 있는 결과 집합의 수입니다. Null을 허용하지 않습니다.
transaction_id bigint 이 요청이 실행되는 트랜잭션의 ID입니다. Null을 허용하지 않습니다.
context_info varbinary(128) 세션의 CONTEXT_INFO 값입니다. Nullable.
percent_complete real 다음 명령에 대해 완료된 작업 비율입니다.

ALTER INDEX REORGANIZE
AUTO_SHRINK 옵션 사용 ALTER DATABASE
BACKUP DATABASE
DBCC CHECKDB
DBCC CHECKFILEGROUP
DBCC CHECKTABLE
DBCC INDEXDEFRAG
DBCC SHRINKDATABASE
DBCC SHRINKFILE
RECOVERY
RESTORE DATABASE
ROLLBACK
TDE ENCRYPTION

Null을 허용하지 않습니다.
estimated_completion_time bigint 내부 전용입니다. Null을 허용하지 않습니다.
cpu_time int 요청에 사용되는 CPU 시간(밀리초)입니다. Null을 허용하지 않습니다.
total_elapsed_time int 요청이 도착한 이후 경과한 총 시간(밀리초)입니다. Null을 허용하지 않습니다.
scheduler_id int 이 요청을 예약하고 있는 스케줄러의 ID입니다. Nullable.
task_address varbinary(8) 이 요청과 연결된 작업에 할당된 메모리 주소입니다. Nullable.
reads bigint 이 요청에 의해 수행된 읽기 수입니다. Null을 허용하지 않습니다.
writes bigint 이 요청에 의해 수행된 쓰기 수입니다. Null을 허용하지 않습니다.
logical_reads bigint 요청에 의해 수행된 논리적 읽기 수입니다. Null을 허용하지 않습니다.
text_size int 이 요청에 대한 TEXTSIZE 설정입니다. Null을 허용하지 않습니다.
language nvarchar(128) 요청에 대한 언어 설정입니다. Nullable.
date_format nvarchar(3) 요청에 대한 DATEFORMAT 설정입니다. Nullable.
date_first smallint 요청에 대한 DATEFIRST 설정입니다. Null을 허용하지 않습니다.
quoted_identifier bit 1 = 요청에 대한 QUOTED_IDENTIFIER ON입니다. 그렇지 않으면 0을 반환합니다.

Null을 허용하지 않습니다.
arithabort bit 1 = 요청에 대한 ARITHABORT 설정이 ON입니다. 그렇지 않으면 0을 반환합니다.

Null을 허용하지 않습니다.
ansi_null_dflt_on bit 1 = 요청에 대한 ANSI_NULL_DFLT_ON 설정이 ON입니다. 그렇지 않으면 0을 반환합니다.

Null을 허용하지 않습니다.
ansi_defaults bit 1 = ANSI_DEFAULTS 설정이 요청에 대해 ON입니다. 그렇지 않으면 0을 반환합니다.

Null을 허용하지 않습니다.
ansi_warnings bit 1 = 요청에 대한 ANSI_WARNINGS 설정이 ON입니다. 그렇지 않으면 0을 반환합니다.

Null을 허용하지 않습니다.
ansi_padding bit 1 = 요청에 대한 ANSI_PADDING 설정이 ON입니다.

그렇지 않으면 0을 반환합니다.

Null을 허용하지 않습니다.
ansi_nulls bit 1 = ANSI_NULLS 설정이 요청에 대해 ON입니다. 그렇지 않으면 0을 반환합니다.

Null을 허용하지 않습니다.
concat_null_yields_null bit 1 = 요청에 대한 CONCAT_NULL_YIELDS_NULL 설정이 ON입니다. 그렇지 않으면 0을 반환합니다.

Null을 허용하지 않습니다.
transaction_isolation_level smallint 이 요청에 대한 트랜잭션이 만들어지는 격리 수준입니다. Null을 허용하지 않습니다.
0 = 지정되지 않음
1 = ReadUncommitted
2 = ReadCommitted
3 = 반복 읽기
4 = 직렬화 가능
5 = 스냅샷
lock_timeout int 이 요청에 대한 잠금 제한 시간(밀리초)입니다. Null을 허용하지 않습니다.
deadlock_priority int 요청에 대한 DEADLOCK_PRIORITY 설정입니다. Null을 허용하지 않습니다.
row_count bigint 이 요청에 의해 클라이언트에 반환된 행 수입니다. Null을 허용하지 않습니다.
prev_error int 요청을 실행하는 동안 발생한 마지막 오류입니다. Null을 허용하지 않습니다.
nest_level int 요청에서 실행되는 코드의 현재 중첩 수준입니다. Null을 허용하지 않습니다.
granted_query_memory int 요청에 대한 쿼리 실행에 할당된 페이지 수입니다. Null을 허용하지 않습니다.
executing_managed_code bit 특정 요청이 루틴, 형식 및 트리거와 같은 공용 언어 런타임 개체를 현재 실행하고 있는지 여부를 나타냅니다. 공용 언어 런타임 개체가 스택에 있을 때 항상 설정되며 공용 언어 런타임 내에서 Transact-SQL을 실행하는 동안에도 마찬가지입니다. Null을 허용하지 않습니다.
group_id int 이 쿼리가 속한 워크로드 그룹의 ID입니다. Null을 허용하지 않습니다.
query_hash binary(8) 쿼리에서 계산되고 유사한 논리를 사용하여 쿼리를 식별하는 데 사용되는 이진 해시 값입니다. 쿼리 해시를 사용하여 리터럴 값만 다른 쿼리의 집계 리소스 사용량을 확인할 수 있습니다.
query_plan_hash binary(8) 쿼리 실행 계획에서 계산되고 유사한 쿼리 실행 계획을 식별하는 데 사용되는 이진 해시 값입니다. 쿼리 계획 해시를 사용하여 비슷한 실행 계획이 있는 쿼리의 누적 비용을 찾을 수 있습니다.
statement_sql_handle varbinary(64) 적용 대상: SQL Server 2014(12.x) 이상

sql_handle 개별 쿼리의 입니다.

쿼리 저장소가 데이터베이스에서 사용하도록 설정되지 않은 경우 이 열은 NULL입니다.
statement_context_id bigint 적용 대상: SQL Server 2014(12.x) 이상

에 대한 선택적 외래 키입니다 sys.query_context_settings.

쿼리 저장소가 데이터베이스에서 사용하도록 설정되지 않은 경우 이 열은 NULL입니다.
dop int 적용 대상: SQL Server 2016(13.x) 이상

쿼리의 병렬 처리 수준입니다.
parallel_worker_count int 적용 대상: SQL Server 2016(13.x) 이상

병렬 쿼리인 경우 예약된 병렬 작업자의 수입니다.
external_script_request_id uniqueidentifier 적용 대상: SQL Server 2016(13.x) 이상

현재 요청과 연결된 외부 스크립트 요청 ID입니다.
is_resumable bit 적용 대상: SQL Server 2017(14.x) 이상

요청이 다시 시작 가능한 인덱스 작업인지 여부를 나타냅니다.
page_resource binary(8) 적용 대상: SQL Server 2019(15.x)

wait_resource 열에 페이지가 포함된 경우 페이지 리소스의 8바이트 16진수 표현입니다. 자세한 내용은 sys.fn_PageResCracker를 참조하세요.
page_server_reads bigint 적용 대상: Azure SQL Database 하이퍼스케일

이 요청에서 수행한 페이지 서버 읽기 수입니다. Null을 허용하지 않습니다.
dist_statement_id uniqueidentifier 적용 대상: SQL Server 2022 이상 버전, Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics(서버리스 풀만 해당) 및 Microsoft Fabric

제출된 요청에 대한 문의 고유 ID입니다. Null을 허용하지 않습니다.

설명

SQL Server 외부의 코드(예: 확장 저장 프로시저 및 분산 쿼리)를 실행하려면 비선점형 스케줄러의 제어를 벗어나서 스레드를 실행해야 합니다. 이를 위해 작업자는 선점 모드로 전환됩니다. 이 동적 관리 뷰에서 반환된 시간 값은 선점형 모드에서 사용된 시간을 포함하지 않습니다.

행 모드에서 병렬 요청을 실행하는 경우 SQL Server는 할당된 태스크를 완료해야 하는 작업자 스레드를 조정하는 스레드를 할당합니다. 이 DMV에서는 요청에 대해 코디네이터 스레드만 표시됩니다. reads, writes, logical_readsrow_count 열은 코디네이터 스레드에 대해 업데이트되지 않습니다. wait_type, wait_time, last_wait_type, wait_resourcegranted_query_memory 열은 코디네이터 스레드에 대해서만 업데이트됩니다. 자세한 내용은 스레드 및 태스크 아키텍처 가이드를 참조하세요.

열은 wait_resource sys.dm_tran_locks(Transact-SQL)와 유사한 정보를 resource_description 포함하지만 형식은 다르게 지정됩니다.

사용 권한

사용자에게 서버에 대한 권한이 있는 VIEW SERVER STATE 경우 사용자는 SQL Server 인스턴스에서 실행 중인 모든 세션을 볼 수 있으며, 그렇지 않으면 현재 세션만 표시됩니다. VIEW SERVER STATE는 Azure SQL Database에서 부여할 수 없으므로 sys.dm_exec_requests는 항상 현재 연결로 제한됩니다.

가용성 그룹 시나리오에서 보조 복제본이 읽기 전용으로 설정된 경우 보조 복제본에 대한 연결은 연결 문자열 매개 변수에 애플리케이션 의도를 추가applicationintent=readonly하여 지정해야 합니다. 그렇지 않으면 사용 권한이 있더라도 VIEW SERVER STATE 가용성 그룹의 데이터베이스에 대한 액세스 확인 sys.dm_exec_requests 이 전달되지 않습니다.

SQL Server 2022(16.x) 이상 버전의 sys.dm_exec_requests 경우 서버에 대한 VIEW SERVER PERFORMANCE STATE 권한이 필요합니다.

예제

A. 실행 중인 일괄 처리에 대한 쿼리 텍스트 찾기

다음 예에서는 sys.dm_exec_requests를 쿼리하여 필요한 쿼리를 찾고 출력에서 sql_handle을 복사합니다.

SELECT * FROM sys.dm_exec_requests;
GO

그런 다음 명령문 텍스트를 가져오려면 복사한 시스템 함수sys.dm_exec_sql_text(sql_handle)sql_handle 사용합니다.

SELECT * FROM sys.dm_exec_sql_text(< copied sql_handle >);
GO

B. 실행 중인 일괄 처리가 보유하는 모든 잠금 찾기

다음 예제에서는 sys.dm_exec_requests를 쿼리하여 필요한 일괄 처리를 찾고 출력에서 transaction_id를 복사합니다.

SELECT * FROM sys.dm_exec_requests;
GO

그런 다음 잠금 정보를 찾기 위해 복사한 transaction_idsys.dm_tran_locks 시스템 함수와 함께 사용합니다.

SELECT * FROM sys.dm_tran_locks
WHERE request_owner_type = N'TRANSACTION'
    AND request_owner_id = < copied transaction_id >;
GO

C. 현재 차단된 모든 요청 찾기

다음 예제에서는 sys.dm_exec_requests를 쿼리하여 차단된 요청에 대한 정보를 찾습니다.

SELECT session_id,
    status,
    blocking_session_id,
    wait_type,
    wait_time,
    wait_resource,
    transaction_id
FROM sys.dm_exec_requests
WHERE status = N'suspended';
GO

D. CPU별로 기존 요청 순서 지정

SELECT
    [req].[session_id],
    [req].[start_time],
    [req].[cpu_time] AS [cpu_time_ms],
    OBJECT_NAME([ST].[objectid], [ST].[dbid]) AS [ObjectName],
    SUBSTRING(
        REPLACE(
            REPLACE(
                SUBSTRING(
                    [ST].[text], ([req].[statement_start_offset] / 2) + 1,
                    ((CASE [req].[statement_end_offset]
                            WHEN -1 THEN DATALENGTH([ST].[text])
                            ELSE [req].[statement_end_offset]
                        END - [req].[statement_start_offset]
                        ) / 2
                    ) + 1
                ), CHAR(10), ' '
            ), CHAR(13), ' '
        ), 1, 512
    ) AS [statement_text]
FROM
    [sys].[dm_exec_requests] AS [req]
    CROSS APPLY [sys].dm_exec_sql_text([req].[sql_handle]) AS [ST]
ORDER BY
    [req].[cpu_time] DESC;
GO