课程名称:2.3.5 How to Use Transactions in TiDB(如何在 TiDB 中使用事务)
学习时长:
40分钟
课程收获:
了解事务的基本概念,TiDB 分布式事务实现原理,以及使用方法。
课程内容:
一、 事务基本概念
- 可以理解为一系可以合并在一起可以当做一个的原则操作的集合或者说可以当做一个原则操作的SQL语句操作(从数据库侧)
- 对数据操作提供原则性、一致性、隔离性和持久性证的数据库的功能机制,减轻应用对数据管理和操作的负担
- 事务可以使数据更安全
- 事务可以让并发操作变得更安全,解决读写、写写冲突
二、TiDB事务模式
- 分布式事务引擎:SS2PL+MVCC
2.乐观事务模式(早期TiDB使用的事务模式)
- 提供了快照隔离级别的事务隔离级别
- 事务的所有修改都将缓冲到TiDB的缓存当中
- 只有在提交时进行冲突检查,用户需要重试因冲突导致失败的事务
- 悲观事务模式
- 语句执行中新添加了一个悲观锁加锁阶段
- 通过加锁机制实现了行锁机制和当前读机制
- TiDB又增加了Read-committed
三、如何使用TiDB事务
- 事务特性使用
- 应用需要的隔离级别、容忍何种并发异常、性能要求、
- 应用是否需要对事务进行加锁操作
超时所需配置的操作逻辑
锁唤醒顺序及要求 - 应用是否需要对读有需求
- 是否会有大量的DDL操作
- 乐观事务模式
- 语法和MySQL大部分兼容
- 通过auto commit来控制autocommit
- 使用begin语句将隐式的提交上一个没有提交的事务,同时开启一个新的事务
- 使用DDL语句将隐式的提交上一个没有提交的事务,同时开启一个新的事务
3悲观事务模式(3.0.8以后的版本默认开启)
- 通过 set global tidb_txn_mode = "pessimistic"开启全局
- 通过 begin pessimistic开启单个事务
- 通过 set tx_isolation ="read-committed"控制当前事务的隔离级别
- TiDB不支持Gap lock
- TiDB仅对读到的数据进行加锁
- 使用悲观事务模式,与MySQL的加锁和等锁模式存在不兼容