关于死锁的MySQL手册中的束缚

问题描述 投票:0回答:1

僵局的可能性不受隔离级别的影响,因为隔离级别会改变读取操作的行为,而由于写作操作而发生僵局。 但这在小节中与之矛盾。如何最小化和处理僵局,其中说:

如果您使用锁定读数...尝试使用较低的隔离级别(例如读取的读数)。

那么哪个是真的?僵局不受隔离水平的影响,或者较低的隔离水平可能有助于最大程度地减少僵局?

我知道RDBMS僵局的主题是复杂的,并且被广泛误解。但是在官方文档中有不清楚的信息根本没有帮助... 是否有MySQL专家愿意清除我的困惑?

这是一个很好的指出。 我认为如果僵局肯定会受到交易级别的影响。

由于隔离级别会改变读取操作的行为,而由于写操作而发生僵局。

是一个绝对不正确的语句。 为了给出一个反示例,

BEGIN; UPDATE TABLE_A SET B=5; COMMIT;

将以间隙锁定(给定列不是唯一的索引。)如果隔离电平为

B

。但是,如果隔离水平为

REPEATABLE_READ
mysql concurrency transactions database-deadlocks
1个回答
0
投票
READ_COMMITTED

https://dev.mysql.com/doc/refman/8.4/en/innodb-locking.html#innodb-gap-locks

可以明确禁用gap锁定。如果将交易隔离级别更改为

READ COMMITTED

,则会发生这种情况。在这种情况下,差距锁定被禁用进行搜索和索引扫描,仅用于外键约束检查和重复键检查。
使用

READ COMMITTED
隔离水平也有其他影响。 MySQL评估了
WHERE
条件后,发布了非匹配行的记录锁。对于
UPDATE
语句,InnoDB执行“半稳态”读取,使其返回最新的承诺版本到mySQL,以便MySQL可以确定该行是否匹配了

WHERE

.

UPDATE条件。

锁定锁确实会影响僵局的可能性。


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.