MySQL默认隔离级别为什么是RR
【摘要】 “MySQL为什么选择RR为默认隔离级别”的问题,其实这是个历史遗留问题?MySQL默认的隔离级别为 RR(Repeatable Read),在此隔离级别下,对比binlog格式为ROW、STATEMENT是否会造成主从数据不一致 。MySQL使用RC+STATEMENT组合时(MySQL5.1.5前只有statement格式)将会导致主从数据不一致。当前这个历史遗漏问题以及解决,大家可以将...
“MySQL为什么选择RR为默认隔离级别”的问题,其实这是个历史遗留问题?
MySQL默认的隔离级别为 RR(Repeatable Read),在此隔离级别下,对比binlog格式为ROW、STATEMENT是否会造成主从数据不一致 。
MySQL使用RC+STATEMENT组合时(MySQL5.1.5前只有statement格式)将会导致主从数据不一致。当前这个历史遗漏问题以及解决,大家可以将其设置为RC+ROW组合的方式(例如ORACLE等数据库隔离级别就是RC),而不是必须使用RR(会带来更多的锁等待)。
RC 与 RR 在锁方面的区别?
1,显然 RR 支持 gap lock(next-key lock),而RC则没有gap lock。因为MySQL的RR需要gap lock来解决幻读问题。而RC隔离级别则是允许存在不可重复读和幻读的。所以RC的并发一般要好于RR;
gap lock?
A place in an InnoDB index data structure where new values could be inserted.
RR下扫描过记录都要加锁,对有全表扫描的更新的场景影响极大。
没有显式定义主健,mysql为自动创建隐含的主健,当在某一行上加share或是exclusive锁时,对该记录之前(<)或是之后(>)都会被锁定,从而无法在这些记录
上进行操作,即使没有行满足条件。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)