真实业务场景下,事务隔离级别使用读提交还是可重复读?

一. 提交读(RC) or 可重复读(RR)

大家都知道mysql的默认隔离级别是RR(可重复读),然而oracle只支持提交读和串行化。那我们在实际场景中到底用的哪种隔离级别比较多呢?答案是:提交读!

  • 缘由一:在RR隔离级别下,存在间隙锁,导致出现死锁的几率比RC大的多!
  • 缘由二:在RR隔离级别下,条件列未命中索引会锁表!而在RC隔离级别下,只锁行
  • 缘由三:在RC隔离级别下,半一致性读(semi-consistent)特性增加了update操作的并发性!

重复读中有gap锁大大增加了锁等待和死锁概率 ,很大程度上要求你要保证不同事务内的相同逻辑sql的顺序性(这个不好理解 你需要多想下) ,提交读相比重复读 他的并发性得到了一个很好的保证(锁等待少)从所以在真实业务场景下,当我们修改一组数据时, 这组数据是否需要保证一致性,如果一致性要求没那么强,可以使用提交读 (事务内 多次查询数据 有可能不一致) ,这样你并发会提高很多 减少了锁冲突的概率,代码也会写的飞起(不用考虑那么多了哈)

二. 为什么mysql默认为可重复读?

既然真实业务场景中我们使用的是提交读,那为什么mysql默认隔离级别要设为可重复读呢?

这个是有历史原因的,当然要从我们的主从复制开始讲起了!

主从复制,是基于什么复制的?
是基于binlog复制的!这里不想去搬binlog的概念了,就简单理解为binlog是一个记录

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值