阅读笔记-mysql innodb并发控制实现方式

参考:https://mp.weixin.qq.com/s/R3yuitWpHHGWxsUcE0qIRQ,文中例子截取自上文

redo、undo、回滚段

  • redo:主要解决如果每次修改数据都去磁盘上随机读写,效率很低。所以改为顺序写入到redo日志中然后定期去修改磁盘。即使是数据库奔溃也可以依靠redo重做。保证事务的acid
  • undo:在事务提交之前,会将修改的旧数据存放到undo日志中,新数据记录到redo中。可以利用undo日志来回滚。
  • 回滚段:存储undo日志的地方
  • 下面是一个例子,很清楚的说明其中的关系
    在这里插入图片描述
    在这里插入图片描述

innodb实现多版本并发控制

  • 关键:旧版本数据存放在回滚段中,同时这种架构对mysql冲击不大
  • 每行数据会记录:
    • DB_TRX_ID,最近一次修改它的事务ID;
    • DB_ROLL_PTR,指向undo的指针;
    • DB_ROW_ID,单调递增的行ID;
  • 通过这种方式就可以再undo中获取到历史数据的快照,叫快照读
  • 一般情况下select语句直接读快照,当然也可以获取排它锁
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值