如何找出你效能最差的SQL Server查詢

2021-09-22 20:35:33 字數 1757 閱讀 1688

原文:

如何找出你效能最差的sql server查詢

我經常會被反覆問到這樣的問題:」我有乙個效能很差的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給你下列度量的資訊:

對於每個度量,你得到4個集合資訊的不同列:

手上有了這些資訊找出你效能最差的查詢是什麼。但首先你要知道什麼是你的效能瓶頸——cpu還是i/o限制?如果你的效能瓶頸是cpu限制,你可以用下列查詢問sql server根據cpu消耗列出前5個最差效能的查詢:

--

worst performing cpu bound queries

select

top5

st.text

, qp.query_plan,

qs.*from

sys.dm_exec_query_stats qs

cross

cross

order

by total_worker_time desc

go

你可以看到這裡我使用了簡單的order by total_worker_time desc來返回cpu密集的查詢。另外也通過呼叫sys.dm_exec_sql_textsys.dm_exec_query_plandmf來抓取sql語句和執行計畫本身。下列**顯示如何依據i/o消耗來找出你效能最差的查詢。

1

--worst performing i/o bound queries

2select

top5

3 st.text,4

qp.query_plan,

5 qs.*

6from

sys.dm_exec_query_stats qs

7cross

8cross

9order

by total_logical_reads desc

10go

當在你面前有sql語句和執行計畫時,你可以進一步分析查詢找出是什麼引起高cpu或i/o消耗。

sql server是個驚豔的產品:它可以立即給你問題的很好答案。你只要知道在**找你的答案。至於效能很差的查詢,你總應該通過分析dmvsys.dm_exec_query_stats開始,在這裡sql server儲存裡你執行計畫執行時統計資訊。

感謝關注!

如何找出你效能最差的SQL Server查詢

我經常會被反覆問到這樣的問題 我有乙個效能很差的sql server。我如何找出最差效能的查詢?因此在今天的文章裡會給你一些讓你很容易找到問題答案的資訊嚮導。sql server的乙個優點是它本身能回答幾乎所有你的問題,因為sql server在各個dmv和dmf裡儲存了很多故障排除資訊。另一方面這...

如何找出你效能最差的SQL Server查詢

我經常會被反覆問到這樣的問題 我有乙個效能很差的sql server。我如何找出最差效能的查詢?因此在今天的文章裡會給你一些讓你很容易找到問題答案的資訊嚮導。sql server的乙個優點是它本身能回答幾乎所有你的問題,因為sql server在各個dmv和dmf裡儲存了很多故障排除資訊。另一方面這...

如何找出你效能最差的SQL Server查詢

我經常會被反覆問到這樣的問題 我有乙個效能很差的sql server。我如何找出最差效能的查詢?因此在今天的文章裡會給你一些讓你很容易找到問題答案的資訊嚮導。sql server的乙個優點是它本身能回答幾乎所有你的問題,因為sql server在各個dmv和dmf裡儲存了很多故障排除資訊。另一方面這...