MySQL 默认隔离级别是RR,阿里等大厂却改成RC?

MySQL 的默认隔离级别是 Repeatable Reads主要是因为MySQL在主从复制的过程是通过bin log 进行数据同步的,而MySQL早期只有statement这种bin log格式,这种格式下,bin log记录的是SQL语句的原文。当出现事务乱序的时候,就会导致备库在 SQL 回放之后,结果和主库内容不一致。为了解决这个问题,MySQL默认采用了Repetable Read这种隔离级别,因为在 RR 中,会在更新数据的时候增加记录锁的同时增加间隙锁。可以避免这种情况的发生。

在我知道MySQL 默认隔离级别是RR后,很长一段时间都以为应该不会有人去修改这个默认配置。

但是直到有一天,我们线上发生了一次死锁的问题,我在排查的过程中,才发现我们的数据库用的隔离级别没有使用默认的 RR,而是修改成了Read Committed 。(关于那次死锁排查过程,可以参考:一次数据库的死锁问题排查过程

大家可以通过这个命令查看数据库当前的隔离级别:

select @@tx_isolation;

猜你喜欢

转载自blog.csdn.net/WXF_Sir/article/details/128641186