sys.dm_exec_query_plan (Transact-SQL)

gösterim planı planı tanıtıcısı tarafından belirtilen toplu iş iş işlemi için XML biçiminde verir.Planı plan tanıtıcıyla ya da önbelleğe alınmış veya şu anda yürütülen olabilir belirtildi.

gösterim planı için XML şemasını yayımlanmış ve kullanılabilir durumda. Bu Microsoft Web sitesi.Bu da dizin içindeki kullanılabilir yeri SQL Server 2008 yükler.

Topic link iconTransact-SQL sözdizimi kuralları

sys.dm_exec_query_plan ( plan_handle )

Bağımsız değişkenler

Dönen Tablo

Sütun adı

Veri türü

Açıklama

DBID

smallint

Etkin olan bir içerik veritabanı KIMLIĞI, Transact-SQL Bu plan için karşılık gelen deyim derlendi. Ad hoc ve hazırlıklı toplu işlemler için bu sütun olan null.

sütun null.

ObjectId

int

Nesnenin KIMLIĞI (örneğin, saklı yordamını veya kullanıcı tanımlı işlev) için bu sorgu planı.Ad hoc ve hazırlıklı toplu işlemler için bu sütun olan null.

sütun null.

number

smallint

Numaralı saklı yordam tamsayı.Örneğin, bir grup hakkındaki yordamlar için Siparişler uygulama adlandırılmış olabilirorderproc; 1, orderproc; 2ve böyle devam eder.Ad hoc ve hazırlıklı toplu işlemler için bu sütun olan null.

sütun null.

Şifreli dosya

bit

Ilgili saklı yordam şifreli olup olmadığını gösterir.

0 = şifreli değil

1 = şifrelenmiş

Sütun null değil.

query_plan

xml

Sorgu yürütme planı ile belirtilen derleme gösterim planı gösterimini içerir plan_handle. gösterim planı XML biçimidir.Bir planı, örneğin ad hoc içeren her bir toplu iş için üretilir Transact-SQL ifadeler, saklı yordam çağrıları ve kullanıcı tanımlı bir işlev çağrısı.

sütun null.

Remarks

Aşağıdaki koşullar altında gösterim planı çıktı iade query_plan için döndürülen bir tablo sütunsys.dm_exec_query_plan:

  • Sorgu, düşünüyorsanız, kullanılarak belirtilir plan_handle plan önbellekten çıkarılacak query_plan döndürülen tablonun null sütundur.saat planı tanıtıcı yakalandığı saat ile kullanılan arasındaki gecikme saat varsa, bu durum oluşabilir sys.dm_exec_query_plan.

  • Bazı Transact-SQL deyimlerini, toplu işlem olarak önbelleğe alınmaz ifadeleri ya da dize hazır bilgi boyutu 8 KB boyutundan içeren ifadeleri. Bu tür tablolar için XML Showplans kullanarak alınamıyor. sys.dm_exec_query_plan sürece bu önbellekte kayıtlı olduğundan toplu iş şu anda yürütülüyor.

  • Varsa bir Transact-SQL toplu iş iş iş veya saklı yordam çağrısı kullanarak EXEC (örneğin, dinamik SQL veya kullanıcı tanımlı bir işlev bir çağrı içerir.string), derlenmiş XML gösterim planı'kullanıcı tanımlı işlevi tarafından döndürülen bir tablo yer almaz sys.dm_exec_query_plan toplu iş iş veya saklı yordam.Bunun yerine, ayrı bir çaðrý yapmalısınız. sys.dm_exec_query_plan için kullanıcı tanımlı işleve karşılık gelen bir plan tanıtıcısı.

Ad hoc sorgusu parameterization, basit veya Zorlanmış kullandığında query_plan sütun yalnızca açıklama metni ve gerçek bir sorgu planı içerir.Sorgu planı dönmek için , arama sys.dm_exec_query_plan için hazırlıklı parametreli sorgu planı tanıtıcısı.Sorgu başvurarak parametreli olup olmadığını belirlemek SQL sütunsys.syscacheobjects ya da metin sütunu görünümüsys.dm_exec_sql_text dinamik yönetimi görüntüleyin.Daha fazla bilgi için bkz: parameterization hakkında Basit Parameterization ve Zorlanmış Parameterization.

Izin verilen iç içe düzeyleri yapılan bağlantı sayısında bir kısıtlama yüzünden xml Veri Türü sys.dm_exec_query_plan karşılamak veya iç içe geçmiş öğeleri 128 düzeyi aşan bir sorgu planları döndüremez.' Ün önceki sürümlerinde SQL Server, bu durum, gelen döndüren sorgu planını engelledi ve 6335 hata üretir. Içinde SQL Server 2005 hizmet Pack 2 ve sonraki sürümleri, query_plan sütununda NULL döndürüyor.Kullanabileceğiniz sys.dm_exec_text_query_plan (Transact-SQL) sorgu planı çıktısını metin biçiminde geri dönmek için Dinamik yönetim işlev.

İzinler

Yürütmek için sys.dm_exec_query_plan, kullanıcının üyesi olması gerekirsysadmin sabit sunucu rolü veya sunucuda VIEW SERVER DURUM izninizin.

Örnekler

Aşağıdaki örnekler nasıl sys.dm_exec_query_plan dinamik yönetimi görüntüleyin.

Aşağıdaki sorgular, sorgu düzenleyicide yürütmek XML Showplans görüntülemek için , SQL Server Management Studio,'ı tıklatın ShowPlanXML in the query_plan tarafından döndürülen bir tablo sütunsys.dm_exec_query_plan.XML gösterim planı görüntüler Management Studio Özet bölmesi. XML gösterim planı bir dosyaya kaydetmek için , sağ tıklatın. ShowPlanXML in the query_plan sütun tıklatın.sonuçlar olarak kaydedin., Ad biçiminde <dosya_adı>.sqlplan dosyasında; örneğin, MyXMLShowplan.sqlplan.

C.Önbelleğe alınan sorgu planı yavaş çalışan Transact-SQL sorgusu veya toplu iş iş olarak alma

Sorgu planları için çeşitli Transact-SQL toplu işlemleri, ad hoc toplu işlemleri, saklı yordamlar ve kullanıcı tanımlı işlevler, planı önbelleği olarak adlandırılan bir bellek alanında önbelleğe alınır. Her önbelleğe alınan sorgu planı planı tanıtıcı adı verilen benzersiz bir kimlikle tanıtılır.Bu plan tanıtıcısı ile belirttiğiniz sys.dm_exec_query_plan dinamik yönetim görünümü belirli bir için yürütme planı almak içinTransact-SQL sorgu veya toplu iş.

Varsa bir Transact-SQL sorgu veya toplu iş için belirli bir bağlantıda uzun bir saat çalışır SQL Server, gecikme neden olduğunu bulmak için sorgu veya toplu iş yürütme planı almak. Aşağıdaki örnekte, XML gösterim planı yavaş çalışan sorgu veya toplu iş iş alma gösterilmiştir.

Not

Bu örnek çalıştırmak için , değerleri değiştirin. session_id ve plan_handle sunucunuz için belirli değerleri ile.

Önce sorgu veya toplu iş kullanarak çalıştırdığından işlem için sunucu işleminin KIMLIĞI'ni (SPID) alma 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 plan tanıtıcı, aşağıdaki sorguyu kullanarak almak için dinamik yönetim görünümü:

USE master;
GO
SELECT * FROM sys.dm_exec_requests
WHERE session_id = 54;
GO

Tarafından döndürülen bir tablo sys.dm_exec_requests yavaş çalışan sorgu veya toplu iş planı tanıtıcı olduğunu gösterir.0x06000100A27E7C1FA821B10600, olarak belirtebileceğiniz plan_handle bağımsız değişken ile sys.dm_exec_query_plan Aşağıdaki şekilde, yürütme planı XML biçiminde almak için . XML biçiminde yavaş çalışan sorgu veya toplu iş yürütme planı içindeki query_plan tarafından döndürülen bir tablo sütunsys.dm_exec_query_plan.

USE master;
GO
SELECT * FROM sys.dm_exec_query_plan (0x06000100A27E7C1FA821B10600);
GO

b.Her bir sorgu planı plan önbellekten

Bir plan önbelleğinde bulunan tüm sorgu planlarını görüntüsünü almak için , önbellekteki tüm sorgu planlarını planı tutamaçlarını sorgulayarak almak sys.dm_exec_cached_plans dinamik yönetim görünümü. Plan tanıtıcıları saklanan plan_handle sütun sys.dm_exec_cached_plans. Sonra için plan tanıtıcıları geçirmek için çapraz APPLY işlecini kullanın... sys.dm_exec_query_plan aşağıdaki gibi. XML, şu anda planı önbelleğindeki her plan için çıkış gösterim planı query_plan sütun tablo, döndürdü.

USE master;
GO
SELECT * FROM sys.dm_exec_cached_plans cp CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle);
GO

c.Her sorgu planı için sunucu planı önbelleğinden sorgu istatistiklerini topladı alma

Sunucu planı önbelleğinde bulunan toplanan istatistikleri sahip olan tüm sorgu planlarını, anlık görüntü almak için , bu planlardan önbelleğindeki planı tutamaçlarını sorgulayarak almak sys.dm_exec_query_stats dinamik yönetimi görüntüleyin. Plan tanıtıcıları saklanan plan_handle sütun sys.dm_exec_query_stats. Sonra için plan tanıtıcıları geçirmek için çapraz APPLY işlecini kullanın... sys.dm_exec_query_plan aşağıdaki gibi. XML, sunucu istatistikleri, plan önbelleğindeki şu anda topladı her plan için çıkış gösterim planı query_plan Sütun tablonun döndürülür.

USE master;
GO
SELECT * FROM sys.dm_exec_query_stats qs CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle);
GO

d.Ortalama CPU tarafından ilk beş sorgular hakkında bilgi almak saat

Aşağıdaki örnek, planları ve üst beş sorguları için ortalama CPU süresini verir.

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_query_plan(qs.plan_handle)
ORDER BY total_worker_time/execution_count DESC;
GO