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個高併發導致數倉資源類報錯分析