sys.dm_exec_sql_text(Transact-SQL)

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

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

구문

sys.dm_exec_sql_text(sql_handle | plan_handle)  

인수

sql_handle
실행되었거나 현재 실행 중인 일괄 처리를 고유하게 식별하는 토큰입니다. sql_handle varbinary(64)입니다.

sql_handle 다음 동적 관리 개체에서 가져올 수 있습니다.

plan_handle
실행된 일괄 처리에 대한 쿼리 실행 계획을 고유하게 식별하며 관련 계획이 계획 캐시에 있거나 현재 실행 중인 토큰입니다. plan_handlevarbinary(64)입니다.

다음 동적 관리 개체에서 plan_handle을 얻을 수 있습니다.

반환된 테이블

열 이름 데이터 형식 설명
Dbid smallint 데이터베이스의 ID입니다.

저장 프로시저의 정적 SQL의 경우 저장 프로시저가 포함된 데이터베이스의 ID입니다. 그렇지 않으면 Null입니다.
objectid int 개체의 ID입니다.

임시 및 준비된 SQL 문의 경우 NULL입니다.
number smallint 번호가 매겨진 저장 프로시저의 경우 이 열은 저장 프로시저의 수를 반환합니다. 자세한 내용은 sys.numbered_procedures(Transact-SQL)를 참조 하세요.

임시 및 준비된 SQL 문의 경우 NULL입니다.
encrypted bit 1 = SQL 텍스트가 암호화됩니다.

0 = SQL 텍스트가 암호화되지 않았습니다.
text nvarchar(max) SQL 쿼리의 텍스트입니다.

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

사용 권한

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

SQL Server 2022 이상에 대한 권한

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

설명

임시 쿼리의 경우 SQL 핸들은 서버에 제출되는 SQL 텍스트를 기반으로 하는 해시 값이며 모든 데이터베이스에서 발생할 수 있습니다.

저장 프로시저, 트리거 또는 함수와 같은 데이터베이스 개체의 경우 SQL 핸들은 데이터베이스 ID, 개체 ID 및 개체 번호에서 파생됩니다.

계획 핸들은 전체 일괄 처리의 컴파일된 계획에서 파생된 해시 값입니다.

참고 항목

임시 쿼리에 대한 sql_handle dbid를 확인할 수 없습니다. 임시 쿼리에 대한 dbid를 확인하려면 대신 plan_handle 사용합니다.

A. 개념 예제

다음은 직접 또는 CROSS APPLY사용하여 sql_handle 전달하는 방법을 보여 줍니다.

  1. 활동을 만듭니다.
    SQL Server Management Studio의 새 쿼리 창에서 다음 T-SQL을 실행합니다.

    -- Identify current spid (session_id)
    SELECT @@SPID;
    GO
    
    -- Create activity
      WAITFOR DELAY '00:02:00';
    
  2. CROSS APPLY 사용.
    sys.dm_exec_requests sql_handle CROSS APPLY사용하여 sys.dm_exec_sql_text 전달됩니다. 새 쿼리 창을 열고 1단계에서 식별된 spid를 전달합니다. 이 예제에서는 spid가 됩니다 59.

    SELECT t.*
    FROM sys.dm_exec_requests AS r
    CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS t
    WHERE session_id = 59 -- modify this value with your actual spid
    
  3. sql_handle 직접 전달합니다.
    sys.dm_exec_requests sql_handle가져옵니다. 그런 다음 sql_handle 직접 전달하여 sys.dm_exec_sql_text. 새 쿼리 창을 열고 1단계에서 식별된 spid를 전달하여 sys.dm_exec_requests. 이 예제에서는 spid가 됩니다 59. 그런 다음 반환 된 sql_handle 인수로 전달하여 sys.dm_exec_sql_text.

    -- acquire sql_handle
    SELECT sql_handle FROM sys.dm_exec_requests WHERE session_id = 59  -- modify this value with your actual spid
    
    -- pass sql_handle to sys.dm_exec_sql_text
    SELECT * FROM sys.dm_exec_sql_text(0x01000600B74C2A1300D2582A2100000000000000000000000000000000000000000000000000000000000000) -- modify this value with your actual sql_handle
    

B. 평균 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;  

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

다음 예에서는 일괄 처리에서 실행되는 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)
APPLYsys.dm_exec_text_query_plan 사용(Transact-SQL)