达梦数据库commit阻塞

周一早上过来正常测试项目的时候,发现上周已经调好的一个接口,莫名其妙的出现了问题,具体表现就是接口内部的方法都已经执行完毕了,但是接口任然处于sending request的状态,看了下程序,没有设置断点,控制台也没有相关报错。
在这里插入图片描述
就开始排错,首先在方法内部设置断点,发现每次都是执行到sql语句的时候阻塞,把sql复制出来粘贴到数据库中执行一下,能做出运行,没有问题,就怀疑是否是有人对数据库进行了更新操作,但没有及时提交导致数据库被锁,使用select * from v$sessions where trx_id in (select trx_id from V$LOCK);查询了一下数据库中的锁,可以看到没有出现我们预想中的被上锁的更新语句,排除这个原因。
在这里插入图片描述
后来又在数据库中操作了几次,发现,如果单独执行更新操作,是没有问题的,但如果在更新操作执行后再继续执行commit操作,那么commit就会进入阻塞状态,如图,可以看到insert语句是执行成功的,但是commit语句就一直处于阻塞状态,无法结束,发现这个问题就能解释为什么程序中代码会一直卡在执行sql那一步了,后端框架不管是hibernate还是mybatis在执行sql后都会有默认的commit操作,就是这一步导致了这个bug。在这里插入图片描述
既然是commit的问题,那么就进入服务器查看一下commit的log日志,日志中也没有报错,但是有个问题就是日志中最新的记录是早上的,然后我们下午一直在进行相关测试,难不成最新记录一条都没写入log日志么?
使用df -h命令查看一下磁盘使用率,果然,磁盘的使用率已经满了,删除部分之前的log日志,在进行测试,成功解决。

猜你喜欢

转载自blog.csdn.net/Wyunpeng/article/details/121761670