資料庫高併發效能問題診斷思路總結

2021-08-20 05:23:39 字數 1873 閱讀 5325

一、高併發的dml引發問題:

1,itl等待 (重建索引、增加init trans、加大pct free(索引只是重建後當時有效))

2,右增長索引的enq-index contention(重建索引減少碎片進而減少找空塊的時間、控制併發、刪除無用索引、或者改造為hash分割槽索引)

通過以下方法啟用索引**增強性優化,來緩解enq: tx – index contention爭用

to enable this fix set event 43822 to level 1

命令:alter system set events '43822 trace name context forever,level 1';

3,高併發insert導致的enq-hw (控制併發、刪除無用索引、或者改造為hash分割槽表/索引)

二、高併發查詢引發問題:

1,cache buffer chains latch (優化sql減少buffer gets; 如果競爭是在branch block可以改造為hash分割槽索引;如索引碎片多,考慮重建。特別是consistent gets過多的情況)

2,cursor pin s (拆分高併發的sql + hints)

3,library cache (shared pool latch) (避免hard parse、增加shared pool size、通過增加shared pool size增加子池的個數,進而增加shared pool latch的個數)

三、跟redo相關的問題

1,log file sync /log file parallel write  (使用filesystem的卷的資料庫啟用odm。 ics 啟用後 log file parallel write 由0.89變成0.32ms)

2,_use_adaptive_log_file_sync=false (將log file sync的機制由polling-10ms(11.2.0.3之後開始為true)改造為原來的特性:post/wait-1ms)

(ics庫調整了_use_adaptive_log_file_sync 引數後,ics生產庫的log file sync的等待時間明顯降低,從10ms降低到不到1ms。)

3,control file sequential read (netlife重建controlfile;增加online redo log file size為2g(目的:減少切換頻率和產生的redo log個數,進而使得controlfile中乙個block能夠容納更多log entry;並且減少gap發生的概率);級聯dg:生產-> 同城 -> 上海 )

4,16mb =< log_buffer <= min(128mb, max(auto_size,16m)) 

300mb =< redolog_file_size  <= 1024mb

(auto_size公式是 (number of strand) * (size of per stands) = (cpu_count/16) * (cpu_count*128)k , 化簡之後等於(cpu_count的平方除以128)兆,即 power(cpu_count,2)/128 m)

四、連線相關問題:

1,資料庫processes與中介軟體連線池相關問題 (initial - max)

2,listener queuesize (調大 64、128 。。。)(同時確保主機引數的tcp_conn_req_max_q >= listener queuesize,減少或消除tcp listener drop)

五、分割槽表清理問題:

審視當前的清理方案是否有風險,比如清理時間過長。

global 索引是否可以修改為local 索引

global 索引是否可以drop

global索引是否需要定期重建

清理時長,如果時間太長,是否需要增加並行

提高資料庫併發效能概要

1 減少大事物操作 乙個包含很多sql語句 牽涉很多表的大事物操作鎖住的資源也會多 盡量不使用表級排他鎖,而是用行級鎖 又因為鎖一般是由資料庫根據你的 sql自動分配,所以要注意sql的寫法。比如select into b from a該操作會建立b表,並對b表加表鎖。2 與降低鎖的粒度異曲同工。2...

提高資料庫併發效能概要

3 多資料來源 多庫 4 樂觀鎖 5 臨時表 6 快取 7 資料庫集群 8 讀寫分離策略 9 sql優化 10 正確使用索引 減少大事物操作 乙個包含很多sql語句 牽涉很多表的大事物操作鎖住的資源也會多 盡量不使用表級排他鎖,而是用行級鎖 又因為鎖一般是由資料庫根據你的 sql自動分配,所以要注意...

資料庫高併發問題

多執行緒多程序 計算密集型任務 使用多程序,因為能python有gil,多程序可以利用上cpu多核優勢 io密集型任務 使用多執行緒,做io切換節省任務執行時間 併發 乙個專案剛開始的時候是為了實現基本功能,隨著版本和功能的迭代,大資料和高併發成了軟體設計必須考慮的問題 本質很簡單,乙個是慢,乙個是...