您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關如何找出你性能最差的SQL Server查詢,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
SQL Server的一個優點是它本身能回答幾乎所有你的問題,因為SQL Server在各個DMV和DMF里存儲了很多故障排除信息。另一方面這也是個缺點,因為你必須知道各個DMV/DMF,還有如何把它們解釋和關聯在一起。
至于你的最差性能SQL Server查詢的一個最重要的DMV是sys.dm_exec_query_stats。對于每個緩存的執行計劃,SQL Server存儲了這個執行計劃在運行時的詳細信息。另外SQL Server告訴你這個查詢消耗的CPU時間和I/O讀取。當我對性能很差的SQL Server進行故障排除時,這是我經常使用的基本DMV之一。
當你對sys.dm_exec_query_stats進行一個簡單的SELECT查詢,你會得到有很多不同列的一個非常廣泛的記錄集——有大量的不同數字。
我們來仔細看下它們。對于每個緩存的執行計劃,SQL Server給你下列度量的信息:
Worker Time (columns …_工作者時間)
Physical Reads (columns …_物理讀)
Logical Writes (columns …_邏輯寫)
Logical Reads (columns …_邏輯讀)
SQLCLR Time (columns …_公共語言運行時間)
Elapsed Time (columns …_運行時間)
Row Count (columns …_行數)
對于每個度量,你得到4個集合信息的不同列:
總值(Total value)
上個值(Last value)
最小值(Min value)
最大值(Max value)
手上有了這些信息找出你性能最差的查詢是什么。但首先你要知道什么是你的性能瓶頸——CPU還是I/O限制?如果你的性能瓶頸是CPU限制,你可以用下列查詢問SQL Server根據CPU消耗列出前5個最差性能的查詢:
-- Worst performing CPU bound queries
SELECT TOP 5
st.text,
qp.query_plan,
qs.*
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.plan_handle) st
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
ORDER BY total_worker_time DESC
GO
你可以看到這里我使用了簡單的ORDER BY total_worker_time DESC來返回CPU密集的查詢。另外也通過調用sys.dm_exec_sql_text和sys.dm_exec_query_plan DMF來抓取SQL語句和執行計劃本身。下列代碼顯示如何依據I/O消耗來找出你性能最差的查詢。
-- Worst performing I/O bound queries
SELECT TOP 5
st.text,
qp.query_plan,
qs.*
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.plan_handle) st
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
ORDER BY total_logical_reads DESC
GO
當在你面前有SQL語句和執行計劃時,你可以進一步分析查詢找出是什么引起高CPU或I/O消耗。
關于如何找出你性能最差的SQL Server查詢就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。