课程名称:课程版本(101)+ 2.3.5 How to use Transactions in TiDB(如何在 TiDB 中使用事务)
学习时长:20min
课程收获:了解如何在 TiDB 中使用事务
课程内容:
一、事务的基本介绍
1、概念
A、一系列可以合并在一起的动作作为一个原子单元
B、一种为并发数据处理提供ACID的机制
C、商业社会业务稳定操作的基石
D、官方定义:访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。
2、为什么需要事务?
A、使数据安全
B、使并发操作更安全
并发时会有以下冲突
1) 读-写冲突
2) 写-写冲突
3) 管理冲突
C、使应用开发更简单
1) 状态总是一致
2) 约束总是一致
3) 每个工作流是隔离的
二、TiDB事务
1、分布式事务原理
A、Google percolator paper
B、并发控制策略:SS2PL+MVCC
C、两阶段提交
2、早期版本TiDB使用乐观事务模型
乐观事务模式的重要特性
1) 快照隔离级别的事务隔离
2) 事务调度: TiDB
3) 变更保存在TiDB的memory buffer中
4) 写-写冲突(提交操作才有事务检测)
3、3.0版本引入悲观事务模型
悲观事务模式的重要特性
1) 支持当前读
2) 在DML中加锁
3) 减少写-写冲突
4) 支持读提交隔离级别
三、如何使用TiDB的事务
1、业务需求
A、隔离级别是快照隔离还是读提交
B、是否需要锁机制
1) 怎样配置锁等待超时
2) 锁等待机制是否有必要
C、是否需要可重复读
D、是否有很多并发DDL
2、乐观模式
A、基本语法
1 ) 开始或提交事务: begin, start transaction, commit, rollback
2 ) 使用autocommit=1自动提交
3 ) begin语句隐式提交当前事务并开始一个新事务
4 ) DDL语句会隐式提交事务并开始一个新事物
B、乐观事务模式示例
3、悲观模式
3.0开始,3.0.8之后作为默认事务模式
A、基本语法
1) set gloabl tidb_txn_mode = “pessimistic”
2) 单个事务,begin pessimistic
3) set tx_isolation=“read-commited”
B、悲观事务模式示例
4、死锁
悲观事务模式提供死锁检测
5、悲观锁与MySQL部分不兼容
A、TiDB不支持间隙锁
B、TiDB只支持对读到的数据加锁
C、https://docs.pingcap.com/zh/tidb/stable/pessimistic-transaction
D、https://pingcap.com/blog-cn/tidb-4.0-pessimistic-lock