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

并发,导致,资源,报错,分析 · 浏览次数 : 25

小编点评

## 玩转并发作业 这篇文章分享了华为云社区的《【玩转PB级数仓GaussDB(DWS)】在线运维 - 高并发导致资源类报错分析解决》,其中作者分享了三种解决高并发问题的方法: 1. **设置max_connections参数**:该参数指定每个客户端可以连接的最大连接数,如果超过该数,客户端将会被拒绝连接。 2. **设置max_pool_size参数**:该参数指定每个数据节点可以使用的最大连接数,如果超过该数,数据节点将会被拒绝连接。 3. **设置comm_max_stream参数**:该参数指定每个数据节点可以处理的最大并发数据流数,如果超过该数,数据节点将会被拒绝连接。 **具体设置方法如下:** * **设置max_connections参数**:使用命令`gs_guc set -Z coordinator -N all -I all -c "max_connections=2000"` * **设置max_pool_size参数**:使用命令`gs_guc set -Z coordinator -N all -I all -c "max_pool_size=10000"` * **设置comm_max_stream参数**:使用命令`gs_guc set -Z coordinator -Z datanode -N all -I all -c "comm_max_stream =8000"` **注意:** * 设置完实例参数后,需要先重启每个节点的`om_monitor`进程,然后再重启数据库,使实例参数生效。 * 设置`max_connections`、`max_pool_size`和`comm_max_stream`参数的值需要根据实际需求进行调整。

正文

摘要:集群运行过程中,有时候会执行并发量比较高的业务场景,一些数据库没有为这种高并发作业配置合适的参数,会导致作业大量报错,这篇文章让你玩转并发作业。

本文分享自华为云社区《【玩转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

 

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

与5个高并发导致数仓资源类报错分析相似的内容:

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

摘要:集群运行过程中,有时候会执行并发量比较高的业务场景,一些数据库没有为这种高并发作业配置合适的参数,会导致作业大量报错,这篇文章让你玩转并发作业。 本文分享自华为云社区《【玩转PB级数仓GaussDB(DWS)】在线运维 - 高并发导致资源类报错分析解决》,作者:323老四。 集群运行过程中,有

5个高并发场景优化的衡量指标

今天,我们就来说说在高并发场景下做性能优化有哪些衡量标准,以及做优化时需要注意哪些问题。

【matplotlib 实战】--直方图

直方图,又称质量分布图,用于表示数据的分布情况,是一种常见的统计图表。 一般用横轴表示数据区间,纵轴表示分布情况,柱子越高,则落在该区间的数量越大。构建直方图时,首先首先就是对数据划分区间,通俗的说即是划定有几根柱子(比如,1980年~2020年的数据,每5年划分一个区间的话,共8个区间)。接着,对

[转帖]5个相见恨晚的Linux命令

https://www.sohu.com/a/295860653_487482 编者按:说到Linux命令相信大家都不陌生,就连前端现在也要经常在 terminal 敲一些 node,gulp等命令,本文详细介绍了五个相见恨晚,能极大提高工作效率的命令。 tldr(命令手册) 作为一个开发人员,经常

[转帖]5个相见恨晚的Linux命令

https://www.sohu.com/a/295860653_487482 编者按:说到Linux命令相信大家都不陌生,就连前端现在也要经常在 terminal 敲一些 node,gulp等命令,本文详细介绍了五个相见恨晚,能极大提高工作效率的命令。 tldr(命令手册) 作为一个开发人员,经常

手把手教你调用5个公共API获取数字货币市场数据(文章内附源码)

更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流。 获取数字货币的历史行情数据可以通过一些专门的数字货币数据API或者第三方数据服务来实现。以下是一些获取数字货币历史行情数据的方法: 1 CoinGecko API CoinGecko是一个数字货币市场数据

掌握把“烂”SQL牢牢关进笼子里的密钥

摘要:本文通过5个部分内容帮助开发者快速了解GaussDB(DWS) 资源管理机制,让数仓过载烦恼不再,把“烂”SQL牢牢关进笼子里。 本文分享自华为云社区《直播回顾 | 掌握把“烂”SQL牢牢关进笼子里的密钥》,作者: 华为云社区精选 。 混合负载场景下,怎样避免“烂”语句对数据库系统的冲击?如何

kafka事务流程

流程 kafka事务使用的5个API // 1. 初始化事务 void initTransactions(); // 2. 开启事务 void beginTransaction() throws ProducerFencedException; // 3. 在事务内提交已经消费的偏移量(主要用于消费

[转帖]我偷偷学了这 5 个命令,打印 Linux 环境变量那叫一个“丝滑”!

https://xie.infoq.cn/article/2acfef8d543517619c9202e4e 一、概述 在基于 Linux 和 Unix 的系统中,环境变量是一组动态命名值,存储在系统中,供在 shell 或子 shell 中启动的应用程序使用。简单来说,环境变量是具有名称和关联值的

[转帖]MySQL优化的5个维度

面试官如果问你:你会从哪些维度进行MySQL性能优化?你会怎么回答?所谓的性能优化,一般针对的是MySQL查询的优化。既然是优化查询,我们自然要先知道查询操作要经过哪些环节,然后思考可以在哪些环节进行优化。我之前写过一条SQL查询语句是如何执行的?,感兴趣的朋友可以阅读一下,我用其中的一张图展示查询