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

 

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