OceanBase ocp上开了死锁检测,但是检测不出来死锁,能帮忙看看么?第一步会话1执行: start transaction; update hs_ses.ses_fund_real set enable_balance = to_char(1000000+2) where client_id = '88580000047964'; 第二步会话2执行 start transaction; update hs_ses.ses_fund_detail set business_frozen_balance = to_char(1000000+2) where client_id = '88580000047964' and init_date='20230629'; 第三步会话2执行: update hs_ses.ses_fund_real set enable_balance = to_char(1000000+2) where client_id = '88580000047964'; 第四步会话1执行: update hs_ses.ses_fund_detail set business_frozen_balance = to_char(1000000+2) where client_id = '88580000047964' and init_date='20230629';
先需要了解一下死锁检测的工作原理:
OceanBase是通过ocp实现死锁检测的。
当事务持有的锁与其他事务冲突时候,会形成'wait for'链。
ocp会定期检测'wait for'链,如果检测到形成 closed ring,则判定为死锁。
死锁发生后,ocp会选择一个事务进行回滚,解决死锁。
要解决此问题,可以:
增大 ocpextra.deadlock_check_period 参数,缩短死锁检测间隔
调整 ocpextra.deadlock_retries 参数,增加ocp重试次数
核实 ocpextra.enable_deadlock_detection 是否正确开启死锁检测
查看ocp日志,寻找死锁相关提示
联系OceanBase支持, 分析死锁现象及提供的SQL上下文
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。