Aracılığıyla paylaş


sys.dm_exec_sql_text (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

Belirtilen sql_handle ile tanımlanan SQL partisinin metnini döndürür. Bu tablo değerli fonksiyon, sistem fonksiyonunun fn_get_sql'nin yerini alır.

Sözdizimi

sys.dm_exec_sql_text(sql_handle | plan_handle)  

Arguments

sql_handle
Yürütülmüş veya şu anda yürütülmekte olan bir grupu benzersiz şekilde tanımlayan bir tokendır. sql_handlevarbinar(64).

sql_handle aşağıdaki dinamik yönetim nesnelerinden elde edilebilir:

plan_handle
Bir grup için benzersiz şekilde tanımlanan ve planı plan önbelleğinde bulunan ya da şu anda yürütülmekte olan bir grup için sorgu yürütme planını benzersiz şekilde tanımlayan bir tokendır. plan_handlevarbinary(64) şeklindedir.

plan_handle aşağıdaki dinamik yönetim nesnelerinden alınabilir:

Döndürülen Tablo

Sütun adı Veri türü Description
dbid smallint Veritabanının kimliği.

Saklanan bir prosedürde statik SQL için, saklanan prosedürü içeren veritabanının kimliği. Null değilse.
Nesne Kimliği int Nesnenin kimliği.

Ad hoc ve hazırlanmış SQL ifadeleri için NULL mu?
sayı smallint Numaralı bir saklanan prosedür için, bu sütun depolanan prosedürün numarasını döndürür. Daha fazla bilgi için sys.numbered_procedures (Transact-SQL)'a bakınız.

Ad hoc ve hazırlanmış SQL ifadeleri için NULL mu?
şifrelenmiş bit 1 = SQL metni şifrelenmiştir.

0 = SQL metni şifrelenmemiştir.
text nvarchar(max) SQL sorgusunun metni.

Şifrelenmiş nesneler için NULL'dur.

Permissions

VIEW SERVER STATE Sunucuda izin gerektirir.

SQL Server 2022 ve üzeri için izinler

Sunucuda SUNUCU PERFORMANS DURUMUNU GÖRÜNTÜLE izni gerektirir.

Açıklamalar

Ad hoc sorgular için, SQL tutamaçları sunucuya gönderilen SQL metnine dayalı hash değerleridir ve herhangi bir veritabanından çıkabilir.

Veritabanı nesneleri, örneğin depolanmış prosedürler, tetikleyiciler veya fonksiyonlar için, SQL tutamaçları veritabanı kimliği, nesne kimliği ve nesne numarasından türetilir.

Plan tutucu, tüm grubun derlenmiş planından türetilen bir hash değeridir.

Uyarı

DBID , ad hoc sorgular için sql_handle üzerinden belirlenemez. Ad hoc sorgular için dbid'i belirlemek için plan_handle kullanın.

Örnekler

A. Kavramsal Örnek

Aşağıda, bir sql_handle doğrudan veya CROSS APPLY ile geçişi gösteren temel bir örnek verilmiştir.

  1. Aktivite yaratın.
    SQL Server Management Studio'da yeni bir sorgu penceresinde aşağıdaki T-SQL'i çalıştırın.

    -- Identify current spid (session_id)
    SELECT @@SPID;
    GO
    
    -- Create activity
      WAITFOR DELAY '00:02:00';
    
  2. CROSS APPLY kullanıyorum.
    sys.dm_exec_requests'dan gelen sql_handle CROSS APPLYile sys.dm_exec_sql_text'ye iletilir. Yeni bir sorgu penceresi açın ve adımda belirtilen spid'i geçin. Bu örnekte spid 59ise .

    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. Doğrudan geçiş sql_handle .
    sql_handle sys.dm_exec_requests'den alın. Sonra sql_handle doğrudan sys.dm_exec_sql_text'ye ilet. Yeni bir sorgu penceresi açın ve adımda tanımlanan spid'i sys.dm_exec_requests'e geçirin. Bu örnekte spid 59ise . Sonra geri dönen sql_handlesys.dm_exec_sql_text argüman olarak sunulur.

    -- 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. Ortalama CPU süresine göre en çok sorulan beş sorgu hakkında bilgi edinin

Aşağıdaki örnek, SQL ifadesinin metnini ve en üst beş sorgu için ortalama CPU süresini döndürür.

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. Toplu yürütme istatistiklerini sağla

Aşağıdaki örnek, toplu olarak yürütülen SQL sorgularının metnini geri getirir ve bunlar hakkında istatistiksel bilgi sağlar.

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;  

Ayrıca bakınız

Dinamik Yönetim Görünümleri ve İşlevleri (Transact-SQL)
Yürütmeyle İlgili Dinamik Yönetim Görünümleri ve İşlevleri (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 kullanımı
sys.dm_exec_text_query_plan (Transact-SQL)