TiDB事物隔离级别以及乐观锁模型介绍

     TiDB支持ANSI SQL-92标准中的“读已提交”和“可重复读”两种事物隔离级别。对于“可重复读”隔离级别,在TiDB中叫做“Snapshot Isolation”(快照隔离级别,简称SI),这种隔离级别不会产生“幻像读”,但是会产生写偏斜(write skew)。TiDB缺省的事物隔离级别是SI,可以通过相关语句设置为“读已提交”隔离级别。

     注意:

         (1) 上面所说的SI隔离级别与可重复读是有细微差异的,开发人员一定要注意

         (2)  TiDB官方文档所说支持“读已提交”隔离级别,实质上还是SI级别;与ANSI标准是不同的。

     TiDB 使用乐观锁模型,在事物中执行Update、Insert、Delete等语句时不像MySQL那样使用行级锁锁定相关记录行,只有在事物真正提交时才会检查写写冲突。如果有冲突(即不同事物并发修改了相同的记录行),TiDB会自动进行重试;如果自动重试失败,TiDB会返回错误消息给客户端。应用端需要注意检查 commit 的返回值,即使事物执行时没有出错,commit的时候也可能会出错。

     TiDB 所使用的这种乐观锁模型在冲突严重的场景下,会比较低效,因为冲突导致失败的事物所执行的所有语句都是无效的,TiDB自动重试时需要重复做这些操作。举一个比较极端的例子,就是把数据库当做计数器用,如果访问的并发度比较高,那么一定会有严重的冲突,导致大量的重试甚至是超时。但是如果访问冲突并不十分严重,那么乐观锁模型具备较高的效率。所以在冲突严重的场景下,推荐在系统架构层面解决问题,比如将计数器放在 Redis中。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值