5個高併發導致數倉資源類報錯分析

語言: CN / TW / HK
摘要:集羣運行過程中,有時候會執行併發量比較高的業務場景,一些數據庫沒有為這種高併發作業配置合適的參數,會導致作業大量報錯,這篇文章讓你玩轉併發作業。

本文分享自華為雲社區《【玩轉PB級數倉GaussDB(DWS)】在線運維 - 高併發導致資源類報錯分析解決》,作者:323老四。

集羣運行過程中,有時候會執行併發量比較高的業務場景,一些數據庫沒有為這種高併發作業配置合適的參數,會導致作業大量報錯,這篇文章讓你玩轉併發作業。

【報錯信息一】

客户端返回以下類似報錯

FATAL:  Already too many clients, active/non-active/reserved: 800/19/3.

--這種報錯是因為客户端連接數超過了CN最大連接數

【解決辦法】

gs_guc set -Z coordinator -Z datanode -N all -I all -c "max_connections=2000"

然後重啟集羣

其中max_connections不能調節過大按照實際需要調節,過大會預佔過多內存。

【報錯信息二】

客户端或者日誌有以下報錯

has no available slot, the number of slot in use reaches upper limit!

--這種報錯是因為CN與其它實例(CN/DN)之間的連接數超過了參數控制

【解決辦法】

gs_guc set -Z coordinator -N all -I all -c " max_pool_size=2000"
gs_guc set -Z datanode -N all -I all -c " max_pool_size=10000"

然後重啟集羣

由於DN數一般大於CN數量很多,所以max_pool_size參數DN設置比較大。

【報錯信息三】

客户端或者日誌有以下報錯

Cannot get stream index, maybe comm_max_stream is not enough

--這種報錯是因為數據庫中的數據流數大於了TCP代理通信庫或SCTP通信庫支持的最大併發數據流數

【解決辦法】

gs_guc set -Z coordinator -Z datanode -N all -I all -c "comm_max_stream =8000"

然後重啟集羣

該參數值必須大於併發數*每併發平均stream算子數*(smp的平方)。

【報錯信息四】

客户端或者日誌有以下報錯

maximum number of prepared transactions reached

--這種報錯是因為數據庫中同時處於"預備"狀態的事務的數目超過了上限

【解決辦法】

gs_guc set -Z coordinator -N all -I all -c "max_prepared_transactions =2000"
gs_guc set -Z datanode -N all -I all -c "max_prepared_transactions =8000"

然後重啟集羣

該參數值必須大於max_connections。

【報錯信息五】

客户端或者日誌有以下報錯

Resource temporarily unavailable

--這種報錯是因為當數據庫實例使用的線程數超過了上限

【解決辦法】

合理增大設置當前OS 用户的max user processes

附:在/etc/security/limits.conf配置文件中寫入

*          soft    nproc 100000
*          hard    nproc 100000

實際設置值根據OS以及數據庫實際使用狀況設置。

需要注意的是設置完實例沒法立即生效,需要先重啟每個節點的om_monitor 進程:

ps -ef | grep om_monitor | grep -v grep | awk '{print $2}' | xargs kill -9

然後重啟數據庫,使實例參數生效,再進程檢查,PID為某一CN或者DN的進程號,需要Soft Limit 與Hard Limit均生效:

cat /proc/PID/limits
Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            8388608              unlimited            bytes
Max core file size        unlimited            unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             unlimited            unlimited            processes
Max open files            1000000 1000000              files
Max locked memory         unlimited            unlimited            bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       522824 522824               signals
Max msgqueue size         819200 819200               bytes
Max nice priority         0 0
Max realtime priority     0 0
Max realtime timeout      unlimited            unlimited            us

 

點擊關注,第一時間瞭解華為雲新鮮技術~