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

文章讨论了在KingbaseES集群中遇到的死锁问题,详细描述了执行sys_dump备份时遇到的错误。问题源于AccessExclusiveLock导致的死锁,建议在业务低峰期尝试备份,并探讨了闪回机制、备份格式(sql与dmp)与死锁的关系。文章提供了查询系统锁和活动的SQL语句以帮助排查问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 锁。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值