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个高并发导致数仓资源类报错分析