本文轉載自: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中直接拼寫對應的值。
- 合理使用排序
- 減少比較操作
利用更多的資源
方法有:
- 用戶端多程序并行通路
- 資料庫并行處理