sys.dm_exec_text_query_plan (Transact-SQL)
Showplan metin biçiminde verir bir Transact-SQLtoplu iş veya toplu işiçinde belirli bir deyim . Sorgu planı plan tanıtıcıyla ya da önbelleğe alınmış veya şu anda yürütülen olabilir belirtti.Bu tablo-değerli işlev benzer sys.dm_exec_query_plan (Transact-SQL), ancak aşağıdaki farklar vardır:
Sorgu planı çıktı metin biçiminde döndürülür.
Sorgu planı çıktı boyutu sınırlı değildir.
Tek tek deyimleri toplu iş içinde belirtilebilir.
Sözdizimi
sys.dm_exec_text_query_plan
(
plan_handle
, { statement_start_offset | 0 | DEFAULT }
, { statement_end_offset | -1 | DEFAULT }
)
Bağımsız değişkenler
plan_handle
Bir sorgu planı önbelleğe alınır veya yürütülmekte olan bir toplu iş için benzersiz olarak tanımlar.plan_handleis varbinary(64).Aşağıdaki dinamik yönetimi nesnelerinden planı tanıtıcı elde edilebilir:
statement_start_offset | 0 | VARSAYILAN
, Kendi toplu iş veya kalıcı nesne içindeki metni satır açıklar sorgu başlangıç konumunu bayt cinsinden gösterir.statement_start_offset is int.0 Değeri, toplu işbaşlangıcını gösterir.Varsayılan değer 0’dır.Aşağıdaki dinamik yönetimi nesneleri deyim başlangıç uzaklığı elde edilebilir:
statement_end_offset | -1 | VARSAYILAN
, Kendi toplu iş veya kalıcı nesne içindeki metni satır açıklar sorgu bitiş pozisyonunu bayt cinsinden gösterir.statement_start_offset is int.
-1 Değeri, toplu işsonuna gösterir.Varsayılan değer -1’dır.
Dönen Tablo
Sütun adı |
Veri türü |
Açıklama |
---|---|---|
DBID |
smallint |
Yürürlükte olan içerik veritabanının kimliği, Transact-SQLBu plana karşılık gelendeyim derlenmiş. Hazırlanan ve ad hoc toplu işlemler için bu sütun olan null. Null olabilecek sütundur. |
objectID |
int |
Bu sorgu planı için (örneğin, saklı yordam veya kullanıcı tanımlı işlev) nesne kimliği.Hazırlanan ve ad hoc toplu işlemler için bu sütun olan null. Null olabilecek sütundur. |
sayı |
smallint |
saklı yordam numaralandırılmış bir tamsayı.Örneğin, yordamlar için bir grup siparişleri uygulama adlı orderproc; 1, orderproc; 2ve benzeri.Hazırlanan ve ad hoc toplu işlemler için bu sütun olan null. Null olabilecek sütundur. |
Şifreli dosya |
bit |
saklı yordam karşılık gelen şifreli olup olmadığını gösterir. 0 = şifreli değil 1 = şifreli Sütun null değil. |
query_plan |
nvarchar(max) |
Derlemesaat ile belirtilen sorgu yürütme planı Showplan gösterimini içeren plan_handle.Showplan metin biçimidir.Bir planı içeren, örneğin geçici her toplu iş için üretilen Transact-SQL ifadeler, saklı yordam çağrıları ve kullanıcı tanımlı işlev çağrıları. Null olabilecek sütundur. |
Açıklamalar
Hiçbir Showplan çıkış döndürülür aşağıdaki koşullar altında plan sütun için döndürülen tablo sys.dm_exec_text_query_plan:
Sorgu planı kullanarak belirtilen plan_handle planı önbellekten çıkarıldı query_plandöndürülen tablosütun nullolur. saat varsa, bu durum oluşabilir sys.dm_exec_text_query_plan.
Bazı Transact-SQL ifadeleri önbelleğe alınmaz, toplu işlem ifadeleri ya da ifadelerini içeren dize hazır bilgileri büyük 8 kb cinsinden boyutu.Bu tür ifadeler Showplans edemiyor alınan kullanarak sys.dm_exec_text_query_plan önbellekte yok çünkü.
Bir Transact-SQL toplu iş veya saklı yordam kullanıcı tanımlı bir işlev çağrısı veya dinamik SQLexec örnek olarak kullanarak, bir çağrı içerir (string), kullanıcı tanımlı işlev tarafından döndürülen tablo yer almayan için xml Showplan derlenmiş sys.dm_exec_text_query_plan toplu iş veya saklı yordam.Bunun yerine, ayrı bir arama yapmanız gereken sys.dm_exec_text_query_plan için plan_handle için kullanıcı tanımlı işlevkarşılık gelir.
Ad hoc sorgusu basit ya da zorla parameterizasyonunu kullandığında query_plan sütun deyim metin ve gerçek sorgu planını içerecek.Sorgu planı dönün çağrısı sys.dm_exec_text_query_plan hazırlanan parametreli sorgu planı tutamacının.Başvurarak parametreli olup olmadığını belirlemek sql sütun sys.syscacheobjects görünümü veya metin sütun sys.dm_exec_sql_text dinamik yönetim görünümü.Parameterizasyonunu bakın hakkında daha fazla bilgi için Basit parameterizasyonunu ve Zorunlu parameterizasyonunu.
İzinler
yürütmeksys.dm_exec_text_query_plan, bir kullanıcı bir üye olmanız sysadminsabit sunucu rolü veya sunucuda görünüm server state iznine sahip.
Örnekler
A.Yavaş çalışan Transact -SQL sorgu veya toplu işiçin önbelleğe alınan sorgu planı almak
Yoksa bir Transact-SQL sorgu veya toplu iş belirli bir bağlantı için uzun saat çalışan SQL Server, sorgu veya toplu iş için yürütme planı almak için keşfetmek ne neden gecikme.Aşağıdaki örnek bir yavaş çalışan sorgu veya toplu işShowplan almak nasıl gösterir.
Not
Bu örneği çalıştırmak için değerleri değiştirmek session_id ve plan_handle server belirli değerleriyle
İlk olarak, sorgu veya toplu iş kullanarak çalışan işlem için sunucu işleminin kimliği'ni (SPID) almak sp_who saklı yordam:
USE master;
GO
EXEC sp_who;
GO
Tarafından döndürülen sonuç kümesi sp_who , SPID olduğunu gösterir 54.SPID ile kullanabileceğiniz sys.dm_exec_requests dinamik yönetim görünümü planı tutamacını aşağıdaki sorguyu kullanarak almak için:
USE master;
GO
SELECT * FROM sys.dm_exec_requests
WHERE session_id = 54;
GO
Tarafından döndürülen tablo sys.dm_exec_requests yavaş çalışan sorgu veya toplu iş planı tanıtıcı olduğunu 0x06000100A27E7C1FA821B10600.Aşağıdaki örnek, sorgu planını belirtilen plan tanıtıcısı döndürür ve sorgu veya toplu işiçinde tüm ifadeleri 0 ve -1 varsayılan değerlerini kullanır.
USE master;
GO
SELECT query_plan
FROM sys.dm_exec_text_query_plan (0x06000100A27E7C1FA821B10600,0,-1);
GO
B.Her sorgu planı plan önbellekten
Planı önbellekte bulunan tüm sorgu planları anlık görüntü almak için sorgulayarak önbelleğindeki tüm sorgu planlarını planı tutamaçlarını almak sys.dm_exec_cached_plans dinamik yönetim görünümü.Plan tutamaçları depolanır plan_handle sütun sys.dm_exec_cached_plans.Sonra plan işleyicilerine geçmesine çapraz uygulama işleç kullanın sys.dm_exec_text_query_plan olarak aşağıdadır.Her planı plan önbelleğinde bulunan içinde için çıkış Showplan query_plandöndürülen tablosütun .
USE master;
GO
SELECT *
FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_text_query_plan(cp.plan_handle, DEFAULT, DEFAULT);
GO
C.Kendisi için sunucuya sorgu istatistikleri planı önbellekten topladı her sorgu planı almak
Sunucunun kendisi için tüm sorgu planları, plan önbelleğinde halen toplanan istatistikleri vardır anlık görüntü almak için sorgulayarak bu planlar önbelleğindeki planı tutamaçlarını almak sys.dm_exec_query_stats dinamik yönetim görünümü.Plan tutamaçları depolanır plan_handle sütun sys.dm_exec_query_stats.Sonra plan işleyicilerine geçmesine çapraz uygulama işleç kullanın sys.dm_exec_text_query_plan olarak aşağıdadır.Çıktı, her plan için Showplan döndürülen tablosütunquery_plan.
USE master;
GO
SELECT * FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_text_query_plan(qs.plan_handle, qs.statement_start_offset, qs.statement_end_offset);
GO
D.Ortalama cpu saattarafından üst beş sorguları hakkında bilgi almak
Aşağıdaki örnek, sorgu planları ve ortalama cpu saat üst beş sorguları için verir.Sys.dm_exec_text_query_planişlev 0 ve -1 tüm deyimleri toplu iş sorgu planında dönmek için varsayılan değerleri belirtir.
SELECT TOP 5 total_worker_time/execution_count AS [Avg CPU Time],
Plan_handle, query_plan
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_text_query_plan(qs.plan_handle, 0, -1)
ORDER BY total_worker_time/execution_count DESC;
GO
Ayrıca bkz.