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

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Ubuntu 23.04 采用 Linux Kernel 6.2 作为内核
Ubuntu 23.04 定于 2023 年 4 月 20 日发布。目前已确定它采用 Linux Kernel 6.2 作为内核——这有点出乎意料,因为许多开发者以为 Canonical 会继续坚持使用 Linux Kernel 6.1。毕竟 6.1 上个月正式成为了 LTS,并且开发团队之前也是一直使用它进行测试。 根据 Ubuntu 开发者邮件列表的消息,理想情况下,所有风味版本的内核都已经用上 Linux Kernel 6.2。但由于各种原因,该目标并没有实现。在 23.04 中,现在他们暂时不会为任何风味版本做进一步的 6.1 构建,所有版本都在积极进行构建 6.2 的工作。 此外还有一个问题,因为无论用户是否打算使用 23.04,Ubuntu 常规版本中附带的内核通常会以硬件支持 (HWE) 更新的形式向后移植到最新的 LTS。 Linux 6.2 内核包含许多值得关注的新特性,比如支持更多新硬件、提升性能、增强文件系统、为树莓派的 4K @ 60Hz 显示提供支持等。
- 下一篇
对比分析数仓中行列存的特性
摘要:行存表示了一种数据的存储方式,是最传统的一种存储方式。 本文分享自华为云社区《【玩转PB级数仓GaussDB(DWS)】行列存对比的一些事》,作者:sevenjiang。 行存表示了一种数据的存储方式,是最传统的一种存储方式。对于GaussDB(DWS)来说可以认为其表示存储引擎的基础实现,在其之上逐步构筑了列存和hdfs之类的存储特性。如下简单介绍下行列存使用的一些对比。 集群设置介绍: 参数default_orientation控制建表不指定存储方式的默认行为。 通过如下建表显式设置可以指定行列存储: ORIENTATION 指定表数据的存储方式,即行存方式、列存方式,该参数设置成功后就不再支持修改。 取值范围: • ROW,表示表的数据将以行式存储。 行存储适合于OLTP业务,此类型的表上交互事务比较多,一次交互会涉及表中的多个列,用行存查询效率较高。 • COLUMN,表示表的数据将以列式存储。 列存储适合于数据仓库业务,此类型的表上会做大量的汇聚计算,且涉及的列操作较少 适用场景: 列储存优势: 列的数据特征比较相似,适合压缩,压缩比很高; 表列的个数比较多,但是访问的...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS关闭SELinux安全模块
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Linux系统CentOS6、CentOS7手动修改IP地址
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16