最近接到一個系統全面優化的工作,此系統從開發到運維到管理(伺服器配置/架構/索引設計/日常維護)等等方面均非常優秀,在之前的一些文章中很少涉及深層次語句調優的方法和思路,那麼今天補充一篇。 廢話不多說 直接上思路步驟。 步驟一: 確定重點語句 此部分詳細說明,請參見:Expert 診斷優化系列 針對 ...
最近接到一個系統全面優化的工作,此系統從開發到運維到管理(伺服器配置/架構/索引設計/日常維護)等等方面均非常優秀,在之前的一些文章中很少涉及深層次語句調優的方法和思路,那麼今天補充一篇。
廢話不多說 直接上思路步驟。
步驟一: 確定重點語句
此部分詳細說明,請參見:Expert 診斷優化系列-------------針對重點語句調索引
- l 在SQL專家雲[全面診斷] –[慢語句]-[彙總視圖](預設頁) 中找到執行次數多的語句
- l 結合業務找出重點功能,針對性梳理調優
步驟二 : 重點語句調整思路(以下方法為遞進方式)
註:以下思路適用於語句深度調優(已經規避低級設計或寫法問題,具體內容請參見 :SQL SERVER全面優化-------寫出好語句是習慣)
- l 在複雜存儲過程中找出慢的部分(如圖:存儲過程整體執行6秒,主要消耗在2個高消耗子語句)
- l 觀察語句基本運行情況是否索引缺失(針對重點語句調索引,請參見: Expert 診斷優化系列-------------針對重點語句調索引)
- l 定位語句運行中的阻塞與等待
在SQL專家雲語句執行中觀察所產生的等待,消除語句等待(此部分涉及的點較多,請參見 全面調優系列 SQL SERVER全面優化-------Expert for SQL Server 診斷系列)
- l 定位高開銷
- n Set statistics io on 定位高邏輯讀部分
- n 執行計劃中高開銷百分比
- n Hash join/merage join/nested join 表掃描/索引掃描次數
- l 沒有明顯缺失索引或以添加索引後,詳細分析執行計劃
- n 繼續分析索引(消除key lookup,index/table spool 等)
- n 分析查詢計劃嘗試使用查詢提示(option 並行/並行度/連接方式/連接順序等)
- l 分析語句複雜度及寫法
- n 儘量較少表關聯數量(1.執行計劃穩定性 2.預估數量準確性 3.嵌套導致的多次掃描)
- n 視圖/表值函數篩選條件應用(較少視圖查詢數據量)
- n 降低視圖複雜度(多層視圖嵌套且涉及數量量大無法根據條件篩選),降低由於複雜度導致的視圖內表多次嵌套(hash join/ nested join)掃描
- 考慮使用高成本多欄位覆蓋索引
- 當語句複雜度高且受業務限制無法修改,則嘗試使用多列覆蓋索引來降低內層多次迴圈中的每次開銷
- l 降低數據量與讀寫分離
- n 當語句複雜度高且受業務限制無法修改,可以考慮降低表數據量來減少每次掃描/嵌套開銷等等
- n 讀寫分離,報表類大查詢降低語句阻塞影響,非核心類查詢分離等
步驟三 :保證執行計劃穩定性
當上述優化都進行以後,要確保運行運行穩定,包含如下因素:
- l 統計信息
- l 索引碎片
- l 參數嗅探
- l 執行計劃重編譯
- l 2014以上版本的新參數估計
- l 其他多種因素
步驟四 :複雜過程中其他部分調優
- l 複雜過程的優化可能涉及集中情況
- n 過程中大量時間和消耗集中在1-2條語句,則針對性調優
- n 時間及消耗分佈在多條語句,每條語句時間都不是很長,但整體步驟多,此時一般重點業務逐條優化,非重點業務優化迴圈類操作
- n 非逐條分析,整體環境提升如參數配置、索引全面解析
註 :此部分根據自身業務情況而定,無法給出標準套路
另附幾篇較好的優化思路文章,供大家參考:
SQL SERVER全面優化-------Expert for SQL Server 診斷系列
--------------博客地址---------------------------------------------------------------------------
診斷優化系列 http://www.cnblogs.com/double-K/
-----------------------------------------------------------------------------------------------------
總結 : 語句的調優方法很多,內容很複雜,涉及到的點也很多,無法全部涉及,本文也許只是提供一個簡單的思路供大家參考。
各有各的套路和方法,不喜勿噴!
優化無止境,且行且珍惜!
-----------------------------------------------------------------------------------------------------
註:此文章為原創,歡迎轉載,請在文章頁面明顯位置給出此文鏈接!
若您覺得這篇文章還不錯請點擊下右下角的推薦,非常感謝!