Megosztás a következőn keresztül:


sys.dm_exec_sql_text (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-adatbázis a Microsoft Fabricben

Visszaadja az SQL batch szövegét, amelyet a megadott sql_handle azonosít. Ez a táblázatértékű függvény a fn_get_sql rendszerfüggvényt váltja fel.

Szemantika

sys.dm_exec_sql_text(sql_handle | plan_handle)  

Arguments

sql_handle
Ez egy token, amely egyedien azonosítja azt a sorozatot, amely már teljesített vagy éppen fut. sql_handlevarbináris(64).

A sql_handle a következő dinamikus menedzsment objektumokból származhatunk:

plan_handle
Ez egy token, amely egyedien azonosítja egy lekérdezés végrehajtási tervet egy olyan tételre, amely már teljesített, és a terve a terv gyorsítótárában van, vagy éppen teljesít. plan_handlevarbinary(64).

A plan_handle a következő dinamikus felügyeleti objektumokból szerezhető be:

Visszaadott tábla

Oszlop név Adattípus Description
dbid smallint Az adatbázis azonosítója.

Statikus SQL esetén egy tárolt eljárásban az adatbázis azonosítója, amely tartalmazza a tárolt eljárást. Ellenkező esetben null értékű.
objectid azonosító int Tárgy azonosítója.

Is NULL ad hoc és prepared SQL utasításokhoz.
szám smallint Egy számozott tárolt eljárás esetén ez az oszlop adja vissza a tárolt eljárás számát. További információért lásd sys.numbered_procedures (Transact-SQL).

Is NULL ad hoc és prepared SQL utasításokhoz.
Titkosított bit 1 = SQL szöveg titkosított.

0 = SQL szöveg nincs titkosítva.
text nvarchar(max) Az SQL lekérdezés szövege.

Null a titkosított objektumok esetén.

Permissions

Engedélyre van szükség VIEW SERVER STATE a kiszolgálón.

Engedélyek az SQL Server 2022-hez és újabb verziókhoz

A KISZOLGÁLÓ TELJESÍTMÉNYÁLLAPOTÁNAK MEGTEKINTÉSE engedélyre van szükség a kiszolgálón.

Megjegyzések

Ad hoc lekérdezéseknél az SQL handle hash-értékek a szerverhez beküldött SQL szöveg alapján készülnek, és bármely adatbázisból származhatnak.

Adatbázis objektumoknál, mint például tárolt eljárások, triggerek vagy függvények, az SQL handle az adatbázis azonosítójából, objektumazonosítóból és objektumszámból származnak.

A terv handle egy hash érték, amely az egész tétel lefordított tervéből származik.

Megjegyzés:

A DBID nem lehet sql_handle alapján meghatározni ad hoc lekérdezéseknél. Az ad hoc lekérdezések dbid meghatározásához használd helyette a plan_handle-t .

Példák

A. Fogalmi példa

Az alábbiakban egy alapvető példa látható, hogy egy sql_handle közvetlenül vagy CROSS APPLY használatával lehet átadni.

  1. Hozz létre tevékenységet.
    A következő T-SQL-t egy új lekérdezési ablakban hajtsd végre az SQL Server Management Studio-ban.

    -- Identify current spid (session_id)
    SELECT @@SPID;
    GO
    
    -- Create activity
      WAITFOR DELAY '00:02:00';
    
  2. CROSS APPLY használatával.
    A sys.dm_exec_requests sql_handle a CROSS APPLY segítségével kerül át sys.dm_exec_sql_text-nek. Nyiss új lekérdezési ablakot, és add át az 1. lépésben azonosított spid-et. Ebben a példában a spid véletlenül 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. Átengedni sql_handle egyenesen.
    Szerezd meg a sql_handlesys.dm_exec_requests-től. Ezután add át a sql_handle közvetlenül sys.dm_exec_sql_text-nek. Nyiss új lekérdezési ablakot, és add át az 1. lépésben azonosított spid-et sys.dm_exec_requests-nek. Ebben a példában a spid véletlenül 59. Ezután add át a visszaküldött sql_handle érvként 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. Információt szerezzen az öt legfontosabb lekérdezésről az átlagos CPU idő szerint

A következő példa az SQL utasítás szövegét és az öt legfontosabb lekérdezés átlagos CPU-idejét adja vissza.

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. Csomagos végrehajtási statisztikák biztosítása

Az alábbi példa az SQL lekérdezések szövegét adja vissza, amelyeket kötetekben hajtanak végre, és statisztikai információkat szolgáltatnak róluk.

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;  

Lásd még

Dinamikus felügyeleti nézetek és függvények (Transact-SQL)
végrehajtással kapcsolatos dinamikus felügyeleti nézetek és függvények (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)
APPLY használata
sys.dm_exec_text_query_plan (Transact-SQL)