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 ,建议适当增加
内存大小后观察。
以上内容是个人看法,如有理解不到的地方,还请各位大佬不吝赐教以上内容是个人看法,如有理解不到的地方,还请各位大佬不吝赐教
文档被以下合辑收录
相关文档
评论