使用更高的隔离级别是否会降低发生死锁的可能性?
Does using higher isolation level decreases the probability of having deadlocks?
所以我正在尝试学习 MySQL 并且遇到了隔离级别 (SERIALIZED, REPEATABLE READ, READ COMMITED, READ UNCOMMITED
)
我想我的问题很简单,但我没有在网上找到任何信息,所以这里是:
如果我将默认值 REPEATABLE READ
更改为 SERIALIZED
或者甚至从 READ UNCOMMITED
更改为另一个更高级别的隔离,我出现死锁问题的可能性会降低吗?
提前致谢!
实际上,如果您使用更宽松的 READ UNCOMMITTED
,一方面 SELECT
操作与另一方面 INSERT
或 UPDATE
之间的死锁将不太可能发生SELECT
操作的隔离级别。
如果您的 SELECT
操作可以不获取表并发更改的结果,请使用它。
The possibility of deadlocks is not affected by isolation level. Isolation level changes the behavior of read operations, but deadlock occurs due to write operations. However, isolation level sets fewer locks, hence it can help you to avoid certain lock types (e.g. gap locking).
这些要避免的提示 dead_lock 非常有用 https://www.percona.com/community-blog/2018/09/24/minimize-mysql-deadlocks-3-steps/
所以我正在尝试学习 MySQL 并且遇到了隔离级别 (SERIALIZED, REPEATABLE READ, READ COMMITED, READ UNCOMMITED
)
我想我的问题很简单,但我没有在网上找到任何信息,所以这里是:
如果我将默认值 REPEATABLE READ
更改为 SERIALIZED
或者甚至从 READ UNCOMMITED
更改为另一个更高级别的隔离,我出现死锁问题的可能性会降低吗?
提前致谢!
实际上,如果您使用更宽松的 READ UNCOMMITTED
,一方面 SELECT
操作与另一方面 INSERT
或 UPDATE
之间的死锁将不太可能发生SELECT
操作的隔离级别。
如果您的 SELECT
操作可以不获取表并发更改的结果,请使用它。
The possibility of deadlocks is not affected by isolation level. Isolation level changes the behavior of read operations, but deadlock occurs due to write operations. However, isolation level sets fewer locks, hence it can help you to avoid certain lock types (e.g. gap locking).
这些要避免的提示 dead_lock 非常有用 https://www.percona.com/community-blog/2018/09/24/minimize-mysql-deadlocks-3-steps/