写点什么

5 个高并发导致数仓资源类报错分析

  • 2023-03-13
    中国香港
  • 本文字数:1812 字

    阅读完需:约 6 分钟

本文分享自华为云社区《【玩转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           UnitsMax cpu time              unlimited            unlimited            secondsMax file size             unlimited            unlimited            bytesMax data size             unlimited            unlimited            bytesMax stack size            8388608              unlimited            bytesMax core file size        unlimited            unlimited            bytesMax resident set          unlimited            unlimited            bytesMax processes             unlimited            unlimited            processesMax open files            1000000              1000000              filesMax locked memory         unlimited            unlimited            bytesMax address space         unlimited            unlimited            bytesMax file locks            unlimited            unlimited            locksMax pending signals       522824               522824               signalsMax msgqueue size         819200               819200               bytesMax nice priority         0                    0Max realtime priority     0                    0Max realtime timeout      unlimited            unlimited            us
复制代码


【一起来玩转 PB 级数仓 GaussDB(DWS),分享你的技术经验与体验心得,赢开发者大礼包!】第 19 期有奖征文火热进行中


点击关注,第一时间了解华为云新鲜技术~

发布于: 刚刚阅读数: 6
用户头像

提供全面深入的云计算技术干货 2020-07-14 加入

生于云,长于云,让开发者成为决定性力量

评论

发布
暂无评论
5个高并发导致数仓资源类报错分析_数据库_华为云开发者联盟_InfoQ写作社区