【TiDB 4.0 PCTA 学习笔记】2.3.5 How to Use Transactions in TiDB(如何在 TiDB 中使用事务)@3班+ 何潭@小米

课程名称:2.3.5 How to Use Transactions in TiDB(如何在 TiDB 中使用事务)

学习时长:

30min

课程内容:

事务的基本介绍

TiDB事务设计与实现

  • TiDB分布式事务设计
    • 使用两阶段提交来保证分布式事务的提交
    • google percolator
    • TiDB事务引擎是严格遵循两阶段分锁和多版本控制一个分布式事务模型
  • 乐观事务模式
    • 在语句执行过程当中,当client开启事务之后,这些写入将会缓存在TiDB的内存当中,直到用户发起提交指令之后,TiDB server通过prewrite和commit两阶段的方式对于所有涉及到的key和value写入TiKV执行两阶段提交
    • 乐观事务模式有一下重要特性
      • 快照级别的事务隔离级别,每个事务看到的都是一个全局的事务快照
      • 所有修改都将缓存在TIDB的内存当中
      • 只有在提交时才做冲突检测
      • 提交操作有可能因为冲突产生回滚,需要用户进行事务提交的重试操作
  • 从3.0开始引入悲观事务模式
    • 在语句执行过程中,加了一个悲观锁加锁阶段,下图红框就是语句所涉及的key进行悲观锁加锁的操作,通过加锁实现了行锁机制和当前读机制,在悲观事务语句执行过程当中,由于提前加锁,在最终两阶段提交的过程当中出现事务冲突的概率将大大减小,在悲观事务模型的基础上新增了读提交事务隔离级别

如何使用TIDB事务

  • 需要了解应用需求
    image
  • 乐观模式
    • begin语句将隐式提交上一个语句并开启一个新的事务
    • DDL语句也会隐式的提交上一个语句
  • 提交阶段才会报错
  • 悲观事务模式
    • 3.0.8后默认开启悲观事务模式
      image
  • 被锁住,A提交后B才能提交
  • 提供死锁检测
  • TiDB悲观模型不支持GAP lock,只有行锁
  • TiDB只会对读到的数据加锁
  • 需要了解和mysql的事务不同点可以阅读下面两篇文章
    image

同学你好,感谢参与 TiDB 4.0 课程的学习!

本篇笔记逻辑清晰、内容丰富,被评选为优质笔记,将额外获得 20 积分,并在 「TiDB 培训」分类下获得“置顶”权益,积分兑换规则将于近期开放,敬请关注!

期待您继续产出优质内容!

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。