Sql-Server-2005
在 Server Management Studio 中顯示查詢計劃
另一個 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