当访问的行不同时面临死锁问题

问题描述 投票:0回答:1
select  r.*
    from  reservations r
    where  r.workspaceSid = 'WS0c9faa70166e42f4cf3a8df4b11b4d73'
      and  r.workerSid = 'WK89d7521c91805d7f0a8a2d38a6ec7ab4'
      and  r.status IN (0, 6) for update

2023-03-22T10:35:38.458591Z 33536411 [注意] InnoDB:*** (1) 等待授予此锁:

RECORD LOCKS space id 474931 page no 14657 n bits 416 index fk_workspace_sid of table

twilio_wds
.
reservations
trx id 68165090733 lock_mode X waiting 2023-03-22T10:35:38.458616Z 33536411 [注意] InnoDB: *** (2) 交易:

TRANSACTION 68165090729,ACTIVE 0 秒获取行 使用中的 mysql 表 3,已锁定 3 89 个锁结构,堆大小 8400,170 个行锁,撤消日志条目 1 MySQL 线程 id 33536411,OS 线程句柄 139955900372736,查询 id 47887747705 172.25.89.40 twilio 发送数据

select  r.*
    from  reservations r
    where  r.workspaceSid = 'WS0c9faa70166e42f4cf3a8df4b11b4d73'
      and  r.workerSid = 'WK53a59d20955be23871feb083639ecd30'
      and  r.status IN (0, 6) for 
update  

2023-03-22T10:35:38.458647Z 33536411 [注意] InnoDB: *** (2) HOLDS THE LOCK(S):

RECORD LOCKS space id 474931 page no 14657 n bits 416 index fk_workspace_sid of table

twilio_wds
.
reservations
trx id 68165090729 lock_mode X 2023-03-22T10:35:38.458665Z 33536411 [注意] InnoDB:*** (2) 等待授予此锁:

这是innodb状态页面死锁结果。在这些事务中访问的行是不同的,因此不应该存在可能导致死锁的争用,对吗?

我试图了解受影响的行和不同的行。

mysql database innodb deadlock
1个回答
0
投票

这个综合指数可能有帮助:

INDEX(workspaceSid, workerId, status)

在任何情况下,您的应用程序都必须为死锁做好准备。通常的代码是捕获它并重放整个交易。

© www.soinside.com 2019 - 2024. All rights reserved.