Sql-Server-2005

在 Server Management Studio 中顯示查詢計劃

  • February 6, 2015

另一個 SQL 伺服器問題:我有一個簡單的查詢,它為我提供了自重置計數器以來 CPU 最密集的 SQL:

select top 10  
   sum(qs.total_worker_time) as total_cpu_time,  
   sum(qs.execution_count) as total_execution_count, 

   qs.plan_handle, st.text  
from  
   sys.dm_exec_query_stats qs 
cross apply sys.dm_exec_sql_text(qs.plan_handle) as st
group by qs.plan_handle, st.text 
order by sum(qs.total_worker_time) desc

問題1:究竟是什麼plan_handle?它似乎不是計劃的散列,就像在 Oracle 中一樣。我問是因為我希望能夠檢測到語句計劃發生變化的情況。

問題 2:一旦有了 plan_handle,我就會對實際的計劃感興趣。所以我這樣做,例如:

select * from sys.dm_exec_query_plan (0x060006001F176406B8413043000000000000000000000000)

在 query_plan 列中,我得到一個連結,當我點擊該連結時會顯示一個 XML 文件。如果我將它作為whatever.sqlplan 保存在磁碟上,我可以在Windows 中點兩下它,它會在Management Studio 中正確顯示。肯定有辦法避免這一步?!

問題 3:有沒有辦法將 XML 轉換回文本格式,就像過去的 SET SHOWPLAN_TEXT 一樣?我希望能夠以圖形方式查看它們,但也希望以某種有意義的方式自動區分它們。

謝謝!

我在 Wrox Press 的 SQL Server 2008 Internals and Troubleshooting 一書中找到了以下提示:

如果您使用連接到 SQL 2005 伺服器的 SQL 2008 SSMS,當您點擊 XML 查詢計劃時,它將自動為您載入圖形查詢計劃。

我使用同一本書中的以下查詢驗證了它是否有效:

select session_id, text, query_plan
from sys.dm_exec_requests
cross apply sys.dm_exec_sql_text(sql_handle)
cross apply sys.dm_exec_query_plan(plan_handle)

此外,如果您還沒有看過它,請查看 SQL Sentry 的免費計劃資源管理器。您必須首先將 XML 作為 .sqlplan 保存到磁碟,但它提供了一個更易於使用的 SQL 執行計劃視圖。希望有一天有人會想出一個視覺化執行計劃差異工具。:D

引用自:https://dba.stackexchange.com/questions/1765