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


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

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

 

步驟一: 確定重點語句

  此部分詳細說明,請參見:Expert 診斷優化系列-------------針對重點語句調索引

  • l  在SQL專家雲[全面診斷] –[慢語句]-[匯總視圖](默認頁) 中找到執行次數多的語句
  • l  結合業務找出重點功能,針對性梳理調優

 

步驟二 : 重點語句調整思路(以下方法為遞進方式)

注:以下思路適用於語句深度調優(已經規避低級設計或寫法問題,具體內容請參見 :SQL SERVER全面優化-------寫出好語句是習慣

   

  • l  在復雜存儲過程中找出慢的部分(如圖:存儲過程整體執行6秒,主要消耗在2個高消耗子語句)

 

  在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/

 

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

 

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

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

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

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

注:此文章為原創,歡迎轉載,請在文章頁面明顯位置給出此文鏈接!
若您覺得這篇文章還不錯請點擊下右下角的推薦,非常感謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM