1、資料庫訪問優化法則簡介
從圖上可以看到基本上每種裝置都有兩個指標:
延時(響應時間):表示硬體的突發處理能力;
頻寬(吞吐量):代表硬體持續處理能力。
從上圖可以看出,計算機系統硬體效能從高到代依次為:
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低
利用更多資源
@~10
高2、優化
1、別用<>不等於,不走索引,拆成》 or
2、null的判斷不走索引,盡量給列預設值。
3、union all 替換union。
4、全模糊查詢拆開,或者用全文索引。
5、where 後面先放走索引的,刪的多的。
6、隱式轉換不走索引
7、data時間戳盡量用》\< ,用函式不走索引。
8、>= <= 比 < > 快。
9、不用*。
10、索引對dml(insert,update,delete)附加的開銷有多少?
索引對於insert效能降低56%
索引對於update效能降低47%
索引對於delete效能降低29%
因此對於寫io壓力比較大的系統,表的索引需要仔細評估必要性,另外索引也會占用一定的儲存空間。
很多時候我們需要按一些id查詢資料庫記錄,我們可以採用乙個id乙個請求發給資料庫,如下所示:
for :var in ids do begin
select * from mytable where id=:var;
end;
我們也可以做乙個小的優化, 如下所示,用id inlist的這種方式寫sql:
select * from mytable where id in(:id1,id2,...,idn);
另外當前資料庫一般都是採用基於成本的優化規則,當in數量達到一定值時有可能改變sql執行計畫,從索引訪問變成全表訪問,這將使效能急劇變化。隨著sql中in的裡面的值個數增加,sql的執行計畫會更複雜,占用的記憶體將會變大,這將會增加伺服器cpu及記憶體成本。
評估在in裡面一次放多少個值還需要考慮應用伺服器本地記憶體的開銷,有併發訪問時要計算本地資料使用週期內的併發上限,否則可能會導致記憶體溢位。
綜合考慮,一般in裡面的值個數超過20個以後效能基本沒什麼太大變化,也特別說明不要超過100,超過後可能會引起執行計畫的不穩定性及增加資料庫cpu及記憶體成本,這個需要專業dba評估。
12、合理使用merge join 和hash join。
13、指定並行查詢parallel。
14、繫結變數復用執行計畫
15、用exists代替distanct
16、寫定時job在晚上預處理資料。
3、例項
1、cpu過高,開啟游標共享,分會話級和永久。
2、資料量大使用分割槽技術、merge into技術,外部表優化。
3、少用函式索引,其維護成本和索引儲存空間大於普通索引。
4、復合索引的字首性和可選性,資料檔案離線,日誌發現是非同步i/o過多,超出允許範圍,綜合查詢模組在各個條件上建立組合索引導致。
5、監控業務場景索引,刪除無用索引,定期清理索引碎片,rebuild。
6、oltp優化parse階段,olap優化execute和fetch階段。
7、提高表連線效能,分析巢狀連線、排序連線、雜湊連線。
8、hint強制修改執行計畫,全域性生效。
9、擴充套件快的頻繁申請,臨時表的反覆分配,日誌組的反覆切換,調大引數。
達夢8技術支援筆記(12)
dm審計分析工具 1 主要功能 審計規則的建立與修改,審計記錄的檢視與匯出 2 審計開關和許可權 在dm 系統中,專門為審計設定了開關,要使用審計功能首先要開啟審計開關。審計開 關由過程void sp set enable audit param int 控制,過程執行完後會立即 生效,param ...
達夢8技術支援筆記(11)
dmetl問題學習 1 如何選擇合適的增量抽取方式?可以根據各種增量抽取方式的特點來選擇合適的增量抽取方式,各種方式的 特點如下 觸發器增量抽取方式 對etl 伺服器的負擔較小,實現簡潔,需要在源資料 庫中建立觸發器,適用於資料量大的表,實時性要求較高的場合。影子表增量抽取方式 通過對比影子表和原表...
達夢8技術支援筆記(10)
一 外部表 external 1 不支援mpp,模式名預設為當前使用者 2 不能存在大字段,約束,索引 3 唯讀,不存在表鎖,不允許truncate 4 支援rowid user,uid偽列,不支援tid 5 ctl中預設編碼方式gbk 二 列表 huge 表檔案只存資料,mir負責映象,表名 au...