Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SQL Tuning

rico
July 29, 2012
1.4k

SQL Tuning

70%資料庫效能問題都因為不良SQL造成,
所以分享SQL Tuning實戰技巧

rico

July 29, 2012
Tweet

Transcript

  1. RBO、CBO RBO(Rule–Based Optimization):基於規則的優化程式 剖析SQL並依內部規則產生執行計畫(編號越小優先權越 大) 。 缺點:靈活性太低(想像世界是美好的),需大量改寫SQL。 優點:優化過程簡單。 CBO(Cost-Based Optimization):基於成本的優化程序

    剖析SQL並根據統計值來估算所使用的CPU和 I/O成本, 然後尋找比對估算最佳執行計畫,成本愈底表示執行計畫越 好。 缺點:優化過程複雜較RBO耗時。 優點:提高SQL靈活性(可以寫很複雜性)。
  2. 了解統計值、SARG、提示和執行計畫 統計 統計 統計 統計值 值 值 值: 記錄資料內容分佈的情況 記錄資料內容分佈的情況

    記錄資料內容分佈的情況 記錄資料內容分佈的情況 查詢最佳化程式找出最佳執行計畫的邏輯步驟必要 查詢最佳化程式找出最佳執行計畫的邏輯步驟必要 查詢最佳化程式找出最佳執行計畫的邏輯步驟必要 查詢最佳化程式找出最佳執行計畫的邏輯步驟必要 資料 資料 資料 資料 統計值過時 統計值過時 統計值過時 統計值過時、 、 、 、樣本不足或沒有統計值可能建立不良 樣本不足或沒有統計值可能建立不良 樣本不足或沒有統計值可能建立不良 樣本不足或沒有統計值可能建立不良 的執行計畫 的執行計畫 的執行計畫 的執行計畫 可以針對資料表某個欄位或索引建立 可以針對資料表某個欄位或索引建立 可以針對資料表某個欄位或索引建立 可以針對資料表某個欄位或索引建立 自動更新或手動更新 自動更新或手動更新 自動更新或手動更新 自動更新或手動更新*
  3. SARG格式 格式 格式 格式: 中文叫做查詢參數(意指Where 子句中的所有條件) 讓查詢最佳化程式透過索引快速搜尋資料 符合的運算子:>、<、>=、<=、Between和Like(視萬用字元% 所在位置)。 不符合的運算子:<>、Not、Not

    in、Not Exists和Not Like..等。 不要對欄位做運算和使用函數..等也不符合SARG SQL Tuning 最直覺的第一步 格式範例: 欄位名稱 運算子 常數或變數 Name = ‘Rico’
  4. 執行 執行 執行 執行計畫 計畫 計畫 計畫: 描述 SQL Server

    執行查詢SQL和所需結果集的實體和 邏輯作業順序 程式快取區(SQL Server記憶體集區) 執行內容+查詢計畫 查詢最佳化程式並不會找出最完美執行計畫
  5. SQL Tuning 總結 1.眼見為憑(Performance Monitor、Profiler Trace、 DMV..等) 2.將非SARG改寫為SARG 3.評估統計值 4.開啟statistics

    io 和 time 5.執行暗黑SQL並產生實際執行計畫 6.降低高成本作業(80/20法則) 7.沒有最完美的調校(合理的系統吞吐量)