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_offset 및 sys.dm_exec_sql_text 동적 관리 함수와 함께 사용하여 요청에 대해 현재 실행 중인 문을 검색할 수 있습니다. Nullable. |
statement_end_offset |
int | 현재 실행 중인 일괄 처리 또는 지속형 개체에 대해 현재 실행 중인 문의 종료 위치를 바이트 단위로 나타냅니다(0부터 시작). sql_handle , statement_start_offset 및 sys.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_reads
및 row_count
열은 코디네이터 스레드에 대해 업데이트되지 않습니다. wait_type
, wait_time
, last_wait_type
, wait_resource
및 granted_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_id
를 sys.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
관련 콘텐츠
- 시스템 동적 관리 뷰
- 실행 관련 동적 관리 뷰 및 함수(Transact-SQL)
- sys.dm_os_memory_clerks(Transact-SQL)
- sys.dm_os_sys_info(Transact-SQL)
- sys.dm_exec_query_memory_grants(Transact-SQL)
- sys.dm_exec_query_plan(Transact-SQL)
- sys.dm_exec_sql_text(Transact-SQL)
- SQL Server, SQL Statistics 개체
- 쿼리 처리 아키텍처 가이드
- 스레드 및 태스크 아키텍처 가이드
- 트랜잭션 잠금 및 행 버전 관리 지침
- SQL Server 차단 문제 이해 및 해결을 참조하세요