5個高併發導致數倉資源類報錯分析
摘要:集羣運行過程中,有時候會執行併發量比較高的業務場景,一些數據庫沒有為這種高併發作業配置合適的參數,會導致作業大量報錯,這篇文章讓你玩轉併發作業。
本文分享自華為雲社區《【玩轉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
「其他文章」
- 使用卷積神經網絡實現圖片去摩爾紋
- 內核不中斷前提下,Gaussdb(DWS)內存報錯排查方法
- 簡述幾種常用的排序算法
- 自動調優工具AOE,讓你的模型在昇騰平台上高效運行
- GaussDB(DWS)運維:導致SQL執行不下推的改寫方案
- 詳解目標檢測模型的評價指標及代碼實現
- CosineWarmup理論與代碼實戰
- 淺談DWS函數出參方式
- 代碼實戰帶你瞭解深度學習中的混合精度訓練
- python進階:帶你學習實時目標跟蹤
- Ascend CL兩種數據預處理的方式:AIPP和DVPP
- 詳解ResNet 網絡,如何讓網絡變得更“深”了
- 帶你掌握如何查看並讀懂昇騰平台的應用日誌
- InstructPix2Pix: 動動嘴皮子,超越PS
- 何為神經網絡卷積層?
- 在昇騰平台上對TensorFlow網絡進行性能調優
- 介紹3種ssh遠程連接的方式
- 分佈式數據庫架構路線大揭祕
- DBA必備的Mysql知識點:數據類型和運算符
- 5個高併發導致數倉資源類報錯分析