星期五, 12月 20, 2013

[SQL] 觀看執行計畫重點

執行計畫可能會很龐大,要每個路徑都去觀察是一件相當費時的事情,從效能調校角度來觀察的話,可以先開啟 SET STATISTICS IO ON 來了解 Logical Read 最高是發生在哪一個 Table,先針對執行計畫內該 Table 相關執行路徑去觀察;利用 SET SHOWPLAN_ALL ON 改成文字執行計畫,複製至記事本上,再用 Ctrl + F 去搜尋該 Table 並觀察相關路徑也是一個方法,以下列出常見的觀察重點:

1. 減少資料量:

執行計畫中的箭頭符號代表資料量,資料量越大,箭頭會越粗,滑鼠移到箭頭上方會出現明細資料,可以觀察是否沒有適合的 WHERE 條件而抓取太多資料出來處理
[SQL] 觀看執行計畫重點 -6

2. 統計資訊老舊

觀察 operator 上的[實際資料列數量]和[估計的資料列數量]是否差異太大,差異太大代表,表示統計資訊需要更新
[SQL] 觀看執行計畫重點 -5
3. Index 使用方式是否合理

Index 使用有兩種方式:Index Seek 或 Index Scan,理論上使用 Index Seek 效能會比 Index Scan 佳,但假如抓取大量資料,利用 Index Scan 反而會比 Index Seek 更佳
[SQL] 觀看執行計畫重點 -1
4. 書籤查詢(Bookmark lookup)、鍵查詢(Key Lookup )

SQL 2005 SP2 開始 Bookmark lookup 更名為 Key lookup,代表 T-SQL 語法沒有滿足 covering index,可以觀察 T-SQL 是否有抓取多餘欄位資料或建立包含索引來避免
[SQL] 觀看執行計畫重點 -2
5. missing index

在 SSMS 內執行 T-SQL 語法,假如有 missing index 的話,會利用綠色文字來說明,在綠色文字說明上,點選滑鼠右鍵 => 遺漏索引詳細資料,就會建立 missing index 語法

[SQL] 觀看執行計畫重點-8

6. 避免平行處理

OLPT 小交易系統,跑出平行處理通常代表耗能警訊,下左圖執行計畫中的 operator 上有黃色方向左雙箭頭在上面,就代表平行處理
[SQL] 觀看執行計畫重點 -3
7. 排序

盡量避免在 SQL Server 中進行排序

[SQL] 觀看執行計畫重點 -4
8. 避免隱含式轉換發生

Operator 中的述詞(就是指 WHERE 條件)是否有隱含式轉換,會造成 Index Scan
[SQL] 觀看執行計畫重點 -7
9. Warning 警訊

SELECT operator 中可見右下角的警訊圖式,滑鼠移到該 operator 上就可以觀察警訊內容
[SQL] 觀看執行計畫重點-9

10. 成本較高的 Operator

在執行計畫中每個 operatore 下都會有一個[成本:?%]資訊,代表此 operator 佔整個執行計畫總成本的?%,可以先針對高成本 operator 進行了解

[SQL] 觀看執行計畫重點-10

沒有留言:

張貼留言