星期五, 12月 20, 2013

[SQL] 觀看執行計畫重點

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

1. 減少資料量:

執行計畫中的箭頭符號代表資料量,資料量越大,箭頭會越粗,滑鼠移到箭頭上方會出現明細資料,可以觀察是否沒有適合的 WHERE 條件而抓取太多資料出來處理
2. 統計資訊老舊

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

Index 使用有兩種方式:Index Seek 或 Index Scan,理論上使用 Index Seek 效能會比 Index Scan 佳,但假如抓取大量資料,利用 Index Scan 反而會比 Index Seek 更佳

4. 書籤查詢(Bookmark lookup)、鍵查詢(Key Lookup )


SQL 2005 SP2 開始 Bookmark lookup 更名為 Key lookup,代表 T-SQL 語法沒有滿足 covering index,可以觀察 T-SQL 是否有抓取多餘欄位資料或建立包含索引來避免


5. missing index


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


6. 避免平行處理

OLPT 小交易系統,跑出平行處理通常代表耗能警訊,下左圖執行計畫中的 operator 上有黃色方向左雙箭頭在上面,就代表平行處理

7. 排序


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

8. 避免隱含式轉換發生


Operator 中的述詞(就是指 WHERE 條件)是否有隱含式轉換,會造成 Index Scan

9. Warning 警訊


SELECT operator 中可見右下角的警訊圖式,滑鼠移到該 operator 上就可以觀察警訊內容


10. 成本較高的 Operator

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


沒有留言:

張貼留言