Aracılığıyla paylaş


sys.dm_exec_query_statistics_xml (Transact-SQL)

Şunlar için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümler Azure SQL DatabaseAzure SQL Managed InstanceSQL database in Microsoft Fabric

Uçuş içi istekler için sorgu yürütme planını döndürür. Geçici istatistiklere sahip showplan XML'sini almak için bu DMV'yi kullanın.

Sözdizimi

sys.dm_exec_query_statistics_xml(session_id)

Tartışmalar

session_id

Aranacak toplu işlemi yürüten oturum kimliği. session_idküçüktür. session_id aşağıdaki dinamik yönetim nesnelerinden alınabilir:

Tablo geri getirildi

Sütun Adı Veri Türü Açıklama
session_id smallint Oturumun kimliği. Null değeri atanamaz.
request_id int İsteğin tanımlayıcısı. Null değeri atanamaz.
sql_handle varbinary(64) Sorgunun parçası olduğu toplu işlemi veya saklı yordamı benzersiz olarak tanımlayan belirteç. Nullable.
plan_handle varbinary(64) Şu anda yürütülmekte olan bir toplu iş için sorgu yürütme planını benzersiz olarak tanımlayan belirteç. Nullable.
query_plan xml Sorgu yürütme planının, kısmi istatistikler içeren plan_handle etiketiyle belirtilen çalışma zamanı Showplan gösterimini içerir. Showplan XML biçimindedir. Geçici Transact-SQL deyimleri, saklı yordam çağrıları ve kullanıcı tanımlı işlev çağrıları gibi her toplu işlem için bir plan oluşturulur. Nullable.

Sınırlamalar

DMV ile sys.dm_exec_query_statistics_xml izleme saklı yordamı yürütülürken olası bir rastgele erişim ihlali (AV) nedeniyle, SQL Server 2017 (14.x) CU 26 ve SQL Server 2019 (15.x) CU 12'de Showplan XML öznitelik <ParameterList> değeri ParameterRuntimeValue kaldırıldı. Bu değer, uzun süre çalışan saklı yordamların sorunlarını giderirken yararlı olabilir. Bu değeri SQL Server 2017 (14.x) CU 31, SQL Server 2019 (15.x) CU 19 ve sonraki sürümlerinde izleme bayrağı 2446 kullanarak yeniden etkinleştirebilirsiniz. Bu izleme işareti, ek yük oluşturarak çalışma zamanı parametre değerinin toplanmasına olanak tanır.

Dikkat

İzleme bayrağı 2446' nın üretim ortamında sürekli olarak etkinleştirilmesi amaçlanmamıştır, yalnızca zaman sınırlı sorun giderme amacıyla etkinleştirilmiş olmalıdır. Bu izleme bayrağının kullanılması, DMV'nin çağrılıp çağrılmaması fark etmeksizin çalışma zamanı parametre bilgileriyle bir Showplan XML parçası oluşturduğundan sys.dm_exec_query_statistics_xml ek ve büyük olasılıkla önemli CPU ve bellek yüküne neden olur.

SQL Server 2022 (16.x), Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği'nde, FORCE_SHOWPLAN_RUNTIME_PARAMETER_COLLECTION seçeneğini kullanarak veritabanı düzeyinde aynı işlevi gerçekleştirebilirsiniz.

Açıklamalar

Bu sistem işlevi, Service Pack 1 ile SQL Server 2016 (13.x) ile başlayarak kullanılabilir. Daha fazla bilgi için bkz. KB 3190871.

Bu sistem işlevi hem standart hem de basit sorgu yürütme istatistikleri profil oluşturma altyapısı altında çalışır. Daha fazla bilgi için bkz. Sorgu Profili Oluşturma Altyapısı.

Aşağıdaki koşullar altında, döndürülen tablonun query_plan sütununda sys.dm_exec_query_statistics_xml için hiçbir Showplan çıkışı döndürülmez.

  • Belirtilen session_id karşılık gelen sorgu planı artık yürütülmüyorsa, query_plan döndürülen tablonun sütunu null olur. Örneğin, plan tutamacının ne zaman yakalandığı ve ne zaman kullanıldığı arasında bir zaman gecikmesi varsa bu durum oluşabilir sys.dm_exec_query_statistics_xml

xml veri türünde izin verilen iç içe düzey sayısındaki bir sınırlama nedeniyle, sys.dm_exec_query_statistics_xml 128 iç içe öğe düzeyini karşılayan veya aşan sorgu planları döndüremez. SQL Server'ın önceki sürümlerinde bu koşul sorgu planının döndürülmesini engelledi ve 6335 hatasını oluşturuyordu. SQL Server 2005 (9.x) Service Pack 2 ve sonraki sürümlerinde, query_plan sütunu NULL döndürür.

İzinler

VIEW SERVER STATE SQL Server 2019 (15.x) ve önceki sürümlerde sunucuda izin gerektirir.

VIEW SERVER PERFORMANCE STATE SQL Server 2022 (16.x) ve sonraki sürümlerde sunucuda izin gerektirir.

Veritabanında ve SQL Veritabanı Premium Katmanları'nda VIEW DATABASE STATE izni gerektirir.

SQL Veritabanı Standart ve Temel Katmanları'nda Sunucu yöneticisi veya Microsoft Entra yönetici hesabı gerektirir.

Örnekler

A. Çalışan bir toplu iş için canlı sorgu planı ve yürütme istatistiklerine bakın

Aşağıdaki örnek, ilginç sorguyu bulmak ve çıktısından sys.dm_exec_requests kopyalamak için session_id sorgular.

SELECT *
FROM sys.dm_exec_requests;
GO

Ardından, kopyalanan session_id öğesini sys.dm_exec_query_statistics_xml sistem fonksiyonu ile kullanarak canlı sorgu planını ve yürütme istatistiklerini alın. Bu sorguyu, sorgunuzun çalıştığı oturumdan farklı bir oturumda çalıştırın.

SELECT * FROM sys.dm_exec_query_statistics_xml(< copied session_id >);
GO

Veya tüm işleyen istekler için birleştirilir. Bu sorguyu, sorgunuzun çalıştığı oturumdan farklı bir oturumda çalıştırın.

SELECT eqs.query_plan,
       er.session_id,
       er.request_id,
       er.database_id,
       er.start_time,
       er.[status],
       er.wait_type,
       er.wait_resource,
       er.last_wait_type,
       (er.cpu_time / 1000) AS cpu_time_sec,
       (er.total_elapsed_time / 1000) / 60 AS elapsed_time_minutes,
       (er.logical_reads * 8) / 1024 AS logical_reads_KB,
       er.granted_query_memory,
       er.dop,
       er.row_count,
       er.query_hash,
       er.query_plan_hash
FROM sys.dm_exec_requests AS er
CROSS APPLY sys.dm_exec_query_statistics_xml(session_id) AS eqs
WHERE er.session_id <> @@SPID;
GO