天天看點

資料庫性能優化方法

本文轉載自:https://my.oschina.net/u/3145136/blog/856248

由于對oracle不是很熟悉,是以隻是大概摘錄了方法,具體可以參考上面連結中的博文。

資料庫通路優化法則

為了快速找到SQL的性能瓶頸點,我們也需要了解我們計算機系統的硬體基本性能名額,下圖展示的目前主流計算機性能名額:

資料庫性能優化方法

從圖上可以看到基本上每種裝置都有兩個名額:

  • 延時(響應時間):表示硬體的突發處理能力;
  • 帶寬(吞吐量):代表硬體持續處理能力。

從上圖可以看出,計算機系統硬體性能從高到代依次為:

CPU——Cache(L1-L2-L3)——記憶體——SSD硬碟——網絡——硬碟
           

根據資料庫知識,我們可以列出每種硬體主要的工作内容:

  • CPU及記憶體:緩存資料通路、比較、排序、事務檢測、SQL解析、函數或邏輯運算;
  • 網絡:結果資料傳輸、SQL請求、遠端資料庫通路(dblink);
  • 硬碟:資料通路、資料寫入、日志記錄、大資料量排序、大表連接配接。

根據目前計算機硬體的基本性能名額及其在資料庫中主要操作内容,可以整理出如下圖所示的性能基本優化法則:

資料庫性能優化方法

這個優化法則歸納為5個層次:

1、減少資料通路(減少磁盤通路)

2、傳回更少資料(減少網絡傳輸或磁盤通路)

3、減少互動次數(減少網絡傳輸)

4、減少伺服器CPU開銷(減少CPU及記憶體開銷)

5、利用更多資源(增加資源)
           

由于每一層優化法則都是解決其對應硬體的性能問題,是以帶來的性能提升比例也不一樣。傳統資料庫系統設計是也是盡可能對低速裝置提供優化方法,是以針對低速裝置問題的可優化手段也更多,優化成本也更低。我們任何一個SQL的性能優化都應該按這個規則由上到下來診斷問題并提出解決方案,而不應該首先想到的是增加資源解決問題。

以下是每個優化法則層級對應優化效果及成本經驗參考:

優化法則 性能提升效果 優化成本
減少資料通路 1~1000
傳回更少資料 1~100
減少互動次數 1~20
減少伺服器CPU開銷 1~5
利用更多資源 1~10
減少資料通路

方法有:

  • 建立索引

    索引是個雙刃劍,需要合理的使用索引。

  • 隻通過索引通路資料
  • 優化SQL執行計劃
傳回更少的資料

方法有:

  • 資料分頁處理
  • 隻傳回需要的字段
減少互動次數

方法有:

  • 批量DML
  • In List
  • 設定Fetch Size
  • 使用存儲過程
  • 優化業務邏輯
  • 使用ResultSet遊标處理記錄
減少資料庫伺服器CPU運算

方法有:

  • 使用綁定變量

    綁定變量是指SQL中對變化的值采用變量參數的形式送出,而不是在SQL中直接拼寫對應的值。

  • 合理使用排序
  • 減少比較操作
利用更多的資源

方法有:

  • 用戶端多程序并行通路
  • 資料庫并行處理