Database/MS-SQL

[스크랩] MSSQL sys.dm_exec_requests(Transact-SQL)

99iberty 2016. 11. 22. 15:19


https://msdn.microsoft.com/ko-kr/library/ms177648.aspx


**이 항목은 다음에 적용됩니다.:** ![](../Image/Applies%20to/yes.png)SQL Server\(2008부터 시작\) ![](../Image/Applies%20to/yes.png)Azure SQL 데이터베이스 ![](../Image/Applies%20to/yes.png)Azure SQL 데이터 웨어하우스 ![](../Image/Applies%20to/yes.png)병렬 데이터 웨어하우스


SQL Server에서 실행 중인 각 요청에 대한 정보를 반환합니다.

System_CAPS_ICON_note.jpg 참고


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

적용 대상: SQL Server(SQL Server 2008부터 현재 버전), Azure SQL 데이터베이스.
열 이름데이터 형식설명
session_idsmallint이 요청과 관련된 세션의 ID입니다. Null을 허용하지 않습니다.
request_idint요청의 ID입니다. 세션의 컨텍스트에서 고유합니다. Null을 허용하지 않습니다.
start_timedatetime요청이 도착한 타임스탬프입니다. Null을 허용하지 않습니다.
statusnvarchar(30)요청의 상태입니다. 다음 값 중 하나일 수 있습니다.

- 배경
- 실행 중
- 실행 가능
- 중지 중
- 일시 중지됨

Null을 허용하지 않습니다.
commandnvarchar(32)처리되고 있는 명령의 현재 유형을 식별합니다. 일반 명령 유형은 다음과 같습니다.

- SELECT
- INSERT
- UPDATE
- DELETE
- BACKUP LOG
- BACKUP DATABASE
- DBCC
- FOR

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

- LOCK MONITOR
- CHECKPOINTLAZY
- WRITER

Null을 허용하지 않습니다.
sql_handlevarbinary(64)요청에 대한 SQL 텍스트의 해시 맵입니다. Null을 허용합니다.
statement_start_offsetint현재 실행 중인 일괄 처리 또는 저장 프로시저에서 현재 실행 중인 문이 시작되는 위치까지의 문자 수입니다. sql_handle, statement_end_offset 및 sys.dm_exec_sql_text 동적 관리 함수와 함께 사용하여 요청에 대해 현재 실행 중인 문을 검색할 수 있습니다. Null을 허용합니다.
statement_end_offsetint현재 실행 중인 일괄 처리 또는 저장 프로시저에서 현재 실행 중인 문이 종료되는 위치까지의 문자 수입니다. sql_handle, statement_end_offset 및 sys.dm_exec_sql_text 동적 관리 함수와 함께 사용하여 요청에 대해 현재 실행 중인 문을 검색할 수 있습니다. Null을 허용합니다.
plan_handlevarbinary(64)SQL 실행을 위한 계획의 해시 맵입니다. Null을 허용합니다.
database_idsmallint요청을 실행 중인 대상 데이터베이스의 ID입니다. Null을 허용하지 않습니다.
user_idint요청을 제출한 사용자의 ID입니다. Null을 허용하지 않습니다.
connection_iduniqueidentifier요청이 도착한 연결의 ID입니다. Null을 허용합니다.
blocking_session_idsmallint요청을 차단하고 있는 세션의 ID입니다. 이 열이 NULL이면 요청이 차단되지 않거나 차단 세션의 세션 정보를 사용할 수 없습니다(또는 식별할 수 없음).

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

-3 = 지연된 복구 트랜잭션이 차단 리소스를 소유합니다.

-4 = 내부 래치 상태 전환 때문에 현재 차단 래치 소유자의 세션 ID를 확인할 수 없습니다.
wait_typenvarchar(60)요청이 현재 차단된 경우 이 열은 대기 유형을 반환합니다. Null을 허용합니다.

대기 유형에 대한 자세한 내용은 sys.dm_os_wait_stats(Transact-SQL)을 참조하세요.
wait_timeint요청이 현재 차단된 경우 이 열은 현재 대기의 기간(밀리초)을 반환합니다. Null을 허용하지 않습니다.
last_wait_typenvarchar(60)이 요청이 이전에 차단된 경우 이 열은 마지막 대기의 유형을 반환합니다. Null을 허용하지 않습니다.
wait_resourcenvarchar(256)요청이 현재 차단된 경우 이 열은 요청이 현재 대기하고 있는 리소스를 반환합니다. Null을 허용하지 않습니다.
open_transaction_countint이 요청에 대해 열린 트랜잭션 수입니다. Null을 허용하지 않습니다.
open_resultset_countint이 요청에 대해 열린 결과 집합 수입니다. Null을 허용하지 않습니다.
transaction_idbigint이 요청이 실행되는 트랜잭션의 ID입니다. Null을 허용하지 않습니다.
context_infovarbinary(128)세션의 CONTEXT_INFO 값입니다. Null을 허용합니다.
percent_completereal다음 명령에 대한 작업 완료율입니다.

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

Null을 허용하지 않습니다.
estimated_completion_timebigint내부 전용입니다. Null을 허용하지 않습니다.
cpu_timeint요청에 사용된 CPU 시간(밀리초)입니다. Null을 허용하지 않습니다.
total_elapsed_timeint요청이 도착한 이후 경과한 총 시간(밀리초)입니다. Null을 허용하지 않습니다.
scheduler_idint이 요청을 예약하고 있는 스케줄러의 ID입니다. Null을 허용하지 않습니다.
task_addressvarbinary(8)이 요청과 연관된 태스크에 할당된 메모리 주소입니다. Null을 허용합니다.
readsbigint이 요청에서 수행된 읽기 수입니다. Null을 허용하지 않습니다.
writesbigint이 요청에서 수행된 쓰기 수입니다. Null을 허용하지 않습니다.
logical_readsbigint요청에서 수행된 논리적 읽기 수입니다. Null을 허용하지 않습니다.
text_sizeint이 요청에 대한 TEXTSIZE 설정입니다. Null을 허용하지 않습니다.
languagenvarchar(128)요청에 대한 언어 설정입니다. Null을 허용합니다.
date_formatnvarchar(3)요청에 대한 DATEFORMAT 설정입니다. Null을 허용합니다.
date_firstsmallint요청에 대한 DATEFIRST 설정입니다. Null을 허용하지 않습니다.
quoted_identifierbit1 = QUOTED_IDENTIFIER가 요청에 대해 on입니다. 그렇지 않으면 0입니다.

Null을 허용하지 않습니다.
arithabortbit1 = ARITHABORT 설정이 요청에 대해 on입니다. 그렇지 않으면 0입니다.

Null을 허용하지 않습니다.
ansi_null_dflt_onbit1 = ANSI_NULL_DFLT_ON 설정이 요청에 대해 on입니다. 그렇지 않으면 0입니다.

Null을 허용하지 않습니다.
ansi_defaultsbit1 = ANSI_DEFAULTS 설정이 요청에 대해 on입니다. 그렇지 않으면 0입니다.

Null을 허용하지 않습니다.
ansi_warningsbit1 = ANSI_WARNINGS 설정이 요청에 대해 on입니다. 그렇지 않으면 0입니다.

Null을 허용하지 않습니다.
ansi_paddingbit1 = ANSI_PADDING 설정이 요청에 대해 on입니다.

그렇지 않으면 0입니다.

Null을 허용하지 않습니다.
ansi_nullsbit1 = ANSI_NULLS 설정이 요청에 대해 on입니다. 그렇지 않으면 0입니다.

Null을 허용하지 않습니다.
concat_null_yields_nullbit1 = CONCAT_NULL_YIELDS_NULL 설정이 요청에 대해 on입니다. 그렇지 않으면 0입니다.

Null을 허용하지 않습니다.
transaction_isolation_levelsmallint이 요청이 만들어진 트랜잭션의 격리 수준을 나타냅니다. Null을 허용하지 않습니다.

0 = 지정되지 않음

1 = 커밋되지 않은 읽기

2 = 커밋된 읽기

3 = 반복 읽기

4 = 직렬화 가능

5 = 스냅숏
lock_timeoutint이 요청에 대한 잠금 제한 시간(밀리초)입니다. Null을 허용하지 않습니다.
deadlock_priorityint요청에 대한 DEADLOCK_PRIORITY 설정입니다. Null을 허용하지 않습니다.
row_countbigint이 요청에서 클라이언트에 반환된 행 수입니다. Null을 허용하지 않습니다.
prev_errorint요청이 실행되는 동안 마지막으로 발생한 오류입니다. Null을 허용하지 않습니다.
nest_levelint요청에서 실행되고 있는 코드의 현재 중첩 수준입니다. Null을 허용하지 않습니다.
granted_query_memoryint요청에서 쿼리의 실행에 할당된 페이지 수입니다. Null을 허용하지 않습니다.
executing_managed_codebit특정 요청이 루틴, 유형 및 트리거 같은 공용 언어 런타임 개체를 현재 실행하고 있는지 나타냅니다. 공용 언어 런타임 개체가 스택에 있을 때 항상 설정되며 공용 언어 런타임 내에서 Transact-SQL을 실행하는 동안에도 마찬가지입니다. Null을 허용하지 않습니다.
group_idint이 쿼리가 속한 작업 그룹의 ID입니다. Null을 허용하지 않습니다.
query_hashbinary(8)쿼리에서 계산되는 이진 해시 값으로, 비슷한 논리를 가진 쿼리를 식별하는 데 사용됩니다. 쿼리 해시를 사용하여 리터럴 값만 다른 쿼리에 대한 집계 리소스 사용을 확인할 수 있습니다.
query_plan_hashbinary(8)쿼리 실행 계획에서 계산되는 이진 해시 값으로, 비슷한 쿼리 실행 계획을 식별하는 데 사용됩니다. 쿼리 계획 해시를 사용하여 비슷한 실행 계획을 가진 쿼리의 누적 비용을 찾을 수 있습니다.
statement_sql_handlevarbinary(64)적용 대상: SQL Server 2014 - SQL Server 2016.

나중에 사용하도록 예약되어 있습니다.
statement_context_idbigint적용 대상: SQL Server 2014 - SQL Server 2016.

나중에 사용하도록 예약되어 있습니다.

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

System_CAPS_ICON_note.jpg 참고


서버에 대한 VIEW SERVER STATE 권한이 있는 경우 사용자는 SQL Server 인스턴스에서 실행 중인 모든 세션을 볼 수 있습니다. 그렇지 않은 경우에는 현재 세션만 볼 수 있습니다.

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

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

SELECT * FROM sys.dm_exec_requests;  
GO  

그런 다음 문 텍스트를 가져오기 위해 복사한 sql_handlesys.dm_exec_sql_text(sql_handle) 시스템 함수와 함께 사용합니다.

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

2.실행 중인 일괄 처리에서 보유하고 있는 모든 잠금 찾기

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

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

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

동적 관리 뷰 및 함수(Transact-SQL)
실행 관련 동적 관리 뷰 및 함수(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)