天天看點

【幹貨】語句優化思路與流程

  最近接到一個系統全面優化的工作,此系統從開發到運維到管理(伺服器配置/架構/索引設計/日常維護)等等方面均非常優秀,在之前的一些文章中很少涉及深層次語句調優的方法和思路,那麼今天補充一篇。

廢話不多說 直接上思路步驟。

步驟一: 确定重點語句

  此部分詳細說明,請參見: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    非逐條分析,整體環境提升如參數配置、索引全面解析

注 :此部分根據自身業務情況而定,無法給出标準套路

另附幾篇較好的優化思路文章,供大家參考:

資料庫優化案例——————某市中心醫院HIS系統

30分鐘帶你熟練性能優化的那點兒事兒(案例說明)

SQL SERVER全面優化-------Expert for SQL Server 診斷系列

--------------部落格位址---------------------------------------------------------------------------

診斷優化系列 http://www.cnblogs.com/double-K/

-----------------------------------------------------------------------------------------------------

  總結 : 語句的調優方法很多,内容很複雜,涉及到的點也很多,無法全部涉及,本文也許隻是提供一個簡單的思路供大家參考。

      各有各的套路和方法,不喜勿噴!

      優化無止境,且行且珍惜!

注:此文章為原創,歡迎轉載,請在文章頁面明顯位置給出此文連結!

若您覺得這篇文章還不錯請點選下右下角的推薦,非常感謝!