事务四大特性ACID
事务隔离级别
事务隔离级别区分现象
2PC two-phase commit
缺点:
- 同步阻塞
- 单点故障
- 网络延迟
Percolator
要素:TSO全局时序,隔离级别 并发控制协议,2PC
优点:
- 实现简单
- 基于单行事务基础上,实现了跨行事务
- 去中心化的锁管理
缺点
- 需要管理中心化的版本号
- 网络交互较多
核心:单行控制分布式事务
快照隔离级别Snapshot Isolation,事务只能看到早于它开始时刻之前提交的其他事务。
和可重复读类似,不会出现幻读。如果是悲观锁则和MySQL类似。
分布式时钟 :TSO采用单点全局发号器,误差小,单点故障问题,混合时钟(unix的物理时钟和逻辑时钟,物理时钟更精确)
事务存储在TiKV中的三类CF,包括default(存储修改的数据)、lock(存储 写锁 )、write(存储提交信息,包括开始和结束的时间戳)
TiDB的memBuffer会存储需修改的数据,如果TiDB节点宕机,会清理memBuffer。在提交之前,事务一直都没有加锁,属于乐观锁。
事务执行流程:
- Coodinator prewrite先给primary加锁(事务修改的第一行加锁),然后给secondary加锁(实际是指向primary的锁),清理primary的锁,commit
- Prewrite版本检查 通过上一次的commit_ts和当前事务的start_ts对比。commit_ts<start_ts继续,commit_ts>start_ts回滚
- Prewrite锁冲突检查 检查TiKV中的lock中是否有锁,如果有锁则回滚
- Prewrite加锁 版本检查和锁冲突检查都通过的前提下
- commit锁检查与提交
悲观锁,在Prewrite之前就开始加锁。commit然后清理锁,提交。
隔离级别参数 transaction_isolation
锁的类别参数 tidb_txn_mode
写偏斜在repeatable read或snapshot isolation隔离级别中出现
防止写偏斜,select * from t for update;