【故障排查】kingbase使用sys_dump备份全库出sql文件,出现deadlock

1 环境信息

金仓集群  KingbaseES V008R006C005B0023 on aarch64
UOS enterprise V20

2 问题描述

执行./sys_dump -U system -d test -f /tmp/test$(date +%F).sql 后报错:

2023-06-14 15:02:45 CST test test 17457 0ERROR:  deadlock detected at character 102
2023-06-14 15:02:45 CST test test 17457 0DETAIL:  Process 17457 waits for AccessShareLock on relation 17141 of database 16462;
 blocked by process 17248.
    Process 17248 waits for AccessExclusiveLock on relation 17175 of database 16462; blocked by process 17457.
    Process 17457: select * from "chat_sessions" where "engineer_code" = $1 and "status" = $2 and exists (select * from "chat_messages" where "chat_sessions"."id" = "chat_messages"."session_id") order by "created_at" asc

3 处理方法

#inserts不会锁表,没有触发死锁。 不加inserts默认用copy命令
#--inserts是inserts风格的sql记录数据。 金仓还是推荐备份为dmp格式。
./sys_dump -U system -d test -f /tmp/test$(date +%F).sql -v --inserts

4 排查(略写)

1、这个select * from "chat_sessions" 使用得很频繁。建议在业务不繁忙的时候,
再试着使用./sys_dump 看看效果。

2、由于每次产生deadLock的pid都不一样(数据库会自动kill掉比较旧的pid,防止死锁一直存在),所以SELECT pg_terminate_backend(<pid>); 没用。  重启DB或许也没用。

3、也有可能是flashback闪回机制导致的冲突。 (闪回可找回一些误操作丢失的数据,用闪回可以快速找回)

4、sys_dump备份为sql格式或dmp格式,都可能会出现deadlock (跟导出的文件格式没关系,dmp只是sql的压缩文件。备份的本质一样,就是最后输出文件的时候压缩一下)
SELECT * FROM sys_locks;
SELECT * from sys_stat_activity;

select * from sys_stat_activity where query like '%test%'
select * from sys_stat_activity where query like '%chat_session%'

在这里插入图片描述

5 参考

https://www.cnblogs.com/tiany1224/p/16195407.html  《KingbaseES V8R6C5B0023 sys_dump备份锁冲突故障测试》

AccessExclusiveLock 是一种 Postgres 数据库中的表级锁(table-level lock),它是 PostgreSQL 中最强的一种锁级别。该锁可防止其他事务并发地访问被锁定的表或相关对象,并防止对该表进行写操作。在获取 AccessExclusiveLock 锁期间,其他事务不能获得任何类型的锁,包括共享锁和排他锁。这意味着,仅当当前锁定表的所有操作完成后,其他进程才能对其进行读取或写入操作。因此,在功能实进行权衡时,应谨慎使用 AccessExclusiveLock 锁。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值