课程名称:2.3.5 How to Use Transactions in TiDB(如何在 TiDB 中使用事务)
学习时长:25min
课程收获:TiDB 分布式事务实现原理,以及使用方法
课程内容:
-
事务
-
一系列可以合并在一起的动作作为一个原子单元
-
一种尾并发数据处理提供ACID的机制
-
业务稳定操作的基石
-
为什么需要事务
- 使数据安全
- 使并发安全
- 读-写冲突
- 写-写冲突
- 管理冲突
- 使应用开发更容易
- 状态总是一致
- 约束总是一致
- 每个工作流是隔离的
-
-
TiDB事务模型的设计原理
-
分布式事务模型原理
- Google percolator paper
- 并发控制策略
- 两阶段提交
-
早期版本使用乐观事务模型
- 快照隔离隔离级别
- 事务调度: TiDB
- 变更保存在TiDB的memory buffer中
- 写-写冲突
- ![]
-
3.0开始引入悲观事务模型
- 支持当前读
- 在DML中加锁
- 减少写-写冲突
- 支持读提交隔离级别
-
-
怎样在TiDB种使用事务
-
业务需求
-
隔离级别是快照隔离还是读提交
-
是否需要锁机制
- 怎样配置锁等待超时
- 锁等待机制是否有必要
-
是否需要可重复读
-
是否有很多并发DDL
-
-
乐观模式
-
基本语法
- 开始或提交事务: begin, start transaction, commit, rollback
- 使用autocommit=1自动提交
- begin语句隐式提交当前事务并开始一个新事务
- DDL语句会隐式提交事务并开始一个新事物
-
乐观事务模式示例
-
-
悲观模式
-
3.0开始提供,3.0.8之后作为默认事务模式
-
基本语法
- set gloabl tidb_txn_mode = “pessimistic”
- 单个事务,begin pessimistic
- set tx_isolation=“read-commited”
-
悲观事务模式示例
-
死锁
-
悲观锁与MySQL不兼容之处
-
-