暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
Tbase➜问题分析➜out-of-shared-queue-please-increase-shared_queues.pdf
908
2页
1次
2021-09-16
5墨值下载
Tbase问题分析问题分析out of shared queue,
please increase shared_queues
环境介绍
GTM:一主一从,单GTM内存8G
CN2,单CN内存8G
DN4,单DN内存8G
问题抛出
业务量大时,间隙性出现如下报错
问题分析及解决
在百度搜索问题无果,咨询了 TBASE 开源官方大佬,大佬提示 shared_queues 配置的大小
max_connections 参数的四分之一。根据这个提示,查看了源代码,如图:
代码位置在源文件的 /src/backend/utils/misc/guc.c 中。
再来看看 out of shared queue 错误提示的代码:
代码位置在源文件的 /src/backend/pgxc/squeue/squeue.c 中。
根据这段代码前后推测,节点之间通过生产者与消费者模式进行消息传递,传递消息时需要
新建队列,如果获取不到队列就会提示
out of shared queue, please increase shared_queues
此时,查看 shared queue show shared_queue_size 参数,如下:
postgres=# show shared_queue_size;
shared_queue_size
-------------------
32kB
(1 行记录)
postgres=# show shared_queues;
shared_queues
---------------
256
(1 行记录)
此时,简单计算 32KB*256=8192M ,刚好是 8G 。如果再有请求,已经无法分配内存建立新
的队列了,此时就报 out of shared queue ,从而要求增加队列数,增加队列数就需要增加
内存,可是,队列增加多少呢?按代码里面的说法,队列数是 max_connections 的四分之
一,而当前的最大连接参数设置如下:
postgres=# show max_connections;
max_connections
-----------------
8000
(1 行记录)
由此计算,队列数需要设置为 2000 ,如果是这样,那么, 32KB*2000=64000M ,需要大
63G 内存,从使用者处了解,之前对 max_connections 进行过调整
问题总结
因此,简单总结就是:1、使用者环境的内存资源不足;2、调整参数前,没有关注内存资
的使用情况;3、使用者环境中参数调整没有遵循规则,即:调整 max_connections 时,也需
要调整 shared_queues 。如果使用者 max_connections 一定要设置为 8000 ,建议适当增加
内存大小后观察
of 2
5墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。