TiDB学习笔记(五)-数据库事务设计

事务四大特性ACID

事务隔离级别

事务隔离级别区分现象

2PC two-phase commit

缺点:

  • 同步阻塞
  • 单点故障
  • 网络延迟

Percolator

要素:TSO全局时序,隔离级别 并发控制协议,2PC

优点:

  • 实现简单
  • 基于单行事务基础上,实现了跨行事务
  • 去中心化的锁管理

缺点

  • 需要管理中心化的版本号
  • 网络交互较多

核心:单行控制分布式事务

快照隔离级别Snapshot Isolation,事务只能看到早于它开始时刻之前提交的其他事务。

和可重复读类似,不会出现幻读。如果是悲观锁则和MySQL类似。

分布式时钟 :TSO采用单点全局发号器,误差小,单点故障问题,混合时钟(unix的物理时钟和逻辑时钟,物理时钟更精确)

事务存储在TiKV中的三类CF,包括default(存储修改的数据)、lock(存储 写锁 )、write(存储提交信息,包括开始和结束的时间戳)

TiDB的memBuffer会存储需修改的数据,如果TiDB节点宕机,会清理memBuffer。在提交之前,事务一直都没有加锁,属于乐观锁。

事务执行流程:

  1. Coodinator prewrite先给primary加锁(事务修改的第一行加锁),然后给secondary加锁(实际是指向primary的锁),清理primary的锁,commit
  2. Prewrite版本检查         通过上一次的commit_ts和当前事务的start_ts对比。commit_ts<start_ts继续,commit_ts>start_ts回滚
  3. Prewrite锁冲突检查          检查TiKV中的lock中是否有锁,如果有锁则回滚
  4. Prewrite加锁        版本检查和锁冲突检查都通过的前提下
  5. commit锁检查与提交        

悲观锁,在Prewrite之前就开始加锁。commit然后清理锁,提交。

隔离级别参数 transaction_isolation

锁的类别参数 tidb_txn_mode

写偏斜在repeatable read或snapshot isolation隔离级别中出现

防止写偏斜,select * from t for update;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值