-
Notifications
You must be signed in to change notification settings - Fork 326
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
另一种死锁分类 #9
Comments
你好,谢谢你提供的死锁案例,从你的死锁日志可以抽出下面大概的信息: 事务一:
事务二:
事务一 INSERT 等待 S 锁,应该是唯一键重复导致,page no 255 正好和下面的事务二的 X 记录锁记录一致,但是事务二在等待 page no 206 的一个 X 记录锁,猜测应该是事务一或者其他事务加上的。 一种可能的死锁解释如下:
但是具体场景还得去看下事务一和事务二的相关代码,确认下每个事务具体的 SQL 语句,从你的日志 再次表示感谢,欢迎提个 PR 补充下这个死锁案例。 |
你好,我的事务确实较大,但是为了避免死锁,事务首句有
每次事务一定会执行以下语句
即批量删除group_id为某些值的数据,然后再插入新数据;但是由于开头的select .. for update 的语句,保证对 group_id 相同的记录,只有一个事务正在更新。所以怀疑是next-key 类型的锁导致,但是本地一致无法复现。不知道你是否有解决思路可以参考,谢谢你的回答。 |
这个 select .. for update 语句是什么样的?针对所有的 g1 g2 ... 都加锁吗? |
每次需要更新的group都一定是另一张表的外键,所以针对另一张表的某一条数据 select .. for update,就保证了2个事务更新的 group 集合不同 |
能否提供下两个事务具体的 SQL? |
我在线上环境遇到另一种死锁,但是未在表格中找到,不知道你是否遇到过?
具体日志:
The text was updated successfully, but these errors were encountered: