AnolisOS 8.8 PostgreSQL 咨询锁故障

PostgreSQL 咨询锁引发的故障

最近一段时间系统在使用的过程中总是时不时的遇到这样的问题,提示共享内存用尽,建议你增大 max_locks_per_transaction 参数的值。

错误: 共享内存用尽建议:您可能需要增加参数 max_locks_per_transaction.

问题分析:

根据错误的提示信息,我们首先调整参数 max_locks_per_transaction。这个参数的默认值是 64,我们从 64 调整为 128,直接扩大一倍。但是问题依旧存在。还是出现共享内存用尽。

然后我们进行了第二次分析,数据库的参数配置 max_connections 设置为 4000,max_locks_per_transaction 配置为 128,数据库的关系对象有 2400 个表。shared_buffers 调整为 128GB。这样的配置即使是一个大型的系统应该也不会出现共享内存用尽的问题吧。但是很快程序还是提示共享内存用尽,建议增加 max_locks_per_transaction.

接下来进行第三次的分析,抓取执行的 SQL 以及应用调用的整个过程。从数据库的角度我们需要将参数 log_statement 配置为 all,log_temp_files 设置为 0 记录下所有执行的 SQL。最后发现当提示共享内存用尽的时候在其附件几乎都会伴随着这样的一个 SQL 语句:

select b.* into temp table xx
from vbi2 b inner join tmpvbizt a on a.vbi01=b.vbi01
where pg_try_advisory_xact_lock(b.vbi01) and ......;

我怀疑是这个导致的问题:但是没有足够的证据,因为一个东西你要说服研发,是需要原理+实践。尝试先对这个进行改造。代码升级改造之后,不再提示共享内存用尽了。关于咨询锁的详细信息及其介绍我后面进行了官网介绍的详细学习。后面有机会介绍下。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值