sys.dm_exec_sql_text(Transact-SQL)

지정된 sql_handle로 확인된 SQL 일괄 처리의 텍스트를 반환합니다. 이 테이블 반환 함수는 시스템 함수 fn_get_sql을 대체합니다.

구문

sys.dm_exec_sql_text(sql_handle | plan_handle)

인수

  • sql_handle
    조회할 일괄 처리의 SQL 핸들입니다. sql_handle은 varbinary(64)입니다. 다음 동적 관리 개체에서 sql_handle을 가져올 수 있습니다.

    • sys.dm_exec_query_stats

    • sys.dm_exec_requests

    • sys.dm_exec_cursors

    • sys.dm_exec_xml_handles

    • sys.dm_exec_query_memory_grants

    • sys.dm_exec_connections

  • plan_handle
    쿼리 계획의 식별자입니다.

    자세한 내용은 sys.dm_exec_text_query_plan(Transact-SQL)을 참조하십시오.

반환된 테이블

열 이름

데이터 형식

설명

dbid

smallint

데이터베이스의 ID입니다.

임시 및 준비된 SQL 문의 경우 문이 컴파일된 데이터베이스의 ID입니다.

objectid

int

개체의 ID입니다.

임시 및 준비된 SQL 문의 경우 NULL입니다.

number

smallint

번호가 있는 저장 프로시저의 경우 저장 프로시저의 번호가 이 열에 반환됩니다. 자세한 내용은 sys.numbered_procedures(Transact-SQL)를 참조하십시오.

임시 및 준비된 SQL 문의 경우 NULL입니다.

암호화됨

bit

1 = SQL 텍스트가 암호화됩니다.

0 = SQL 텍스트가 암호화되지 않습니다.

text

nvarchar(max)

SQL 쿼리의 텍스트입니다.

암호화된 개체의 경우 NULL입니다.

사용 권한

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

주의

일괄 처리용 SQL 핸들은 SQL 텍스트 기반의 해시 값입니다. 저장 프로시저, 트리거, 함수 등의 데이터베이스 개체용 SQL 핸들은 데이터베이스 ID, 개체 ID 및 개체 번호에서 파생됩니다. plan_handle은 전체 일괄 처리의 컴파일된 계획에서 파생되는 해시 값입니다.

1.평균 CPU 시간별 상위 5개 쿼리에 대한 정보 얻기

다음 예에서는 상위 5개 쿼리에 대한 SQL 문 텍스트와 평균 CPU 시간을 반환합니다.

SELECT TOP 5 total_worker_time/execution_count AS [Avg CPU Time],
    SUBSTRING(st.text, (qs.statement_start_offset/2)+1, 
        ((CASE qs.statement_end_offset
          WHEN -1 THEN DATALENGTH(st.text)
         ELSE qs.statement_end_offset
         END - qs.statement_start_offset)/2) + 1) AS statement_text
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
ORDER BY total_worker_time/execution_count DESC;

2.일괄 처리 실행 통계 제공

다음 예에서는 일괄 처리에서 실행되는 SQL 쿼리 텍스트를 반환하고 이에 대한 통계 정보를 제공합니다.

SELECT s2.dbid, 
    s1.sql_handle,  
    (SELECT TOP 1 SUBSTRING(s2.text,statement_start_offset / 2+1 , 
      ( (CASE WHEN statement_end_offset = -1 
         THEN (LEN(CONVERT(nvarchar(max),s2.text)) * 2) 
         ELSE statement_end_offset END)  - statement_start_offset) / 2+1))  AS sql_statement,
    execution_count, 
    plan_generation_num, 
    last_execution_time,   
    total_worker_time, 
    last_worker_time, 
    min_worker_time, 
    max_worker_time,
    total_physical_reads, 
    last_physical_reads, 
    min_physical_reads,  
    max_physical_reads,  
    total_logical_writes, 
    last_logical_writes, 
    min_logical_writes, 
    max_logical_writes  
FROM sys.dm_exec_query_stats AS s1 
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2  
WHERE s2.objectid is null 
ORDER BY s1.sql_handle, s1.statement_start_offset, s1.statement_end_offset;

참고 항목

참조

동적 관리 뷰 및 함수(Transact-SQL)

실행 관련 동적 관리 뷰 및 함수(Transact-SQL)

sys.dm_exec_query_stats(Transact-SQL)

sys.dm_exec_requests(Transact-SQL)

sys.dm_exec_cursors(Transact-SQL)

sys.dm_exec_xml_handles(Transact-SQL)

sys.dm_exec_query_memory_grants(Transact-SQL)