摘要:集群運行過程中,有時候會執行併發量比較高的業務場景,一些資料庫沒有為這種高併發作業配置合適的參數,會導致作業大量報錯,這篇文章讓你玩轉併發作業。 本文分享自華為雲社區《【玩轉PB級數倉GaussDB(DWS)】線上運維 - 高併發導致資源類報錯分析解決》,作者:323老四。 集群運行過程中,有 ...
摘要:集群運行過程中,有時候會執行併發量比較高的業務場景,一些資料庫沒有為這種高併發作業配置合適的參數,會導致作業大量報錯,這篇文章讓你玩轉併發作業。
本文分享自華為雲社區《【玩轉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