阅读笔记-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语句直接读快照,当然也可以获取排它锁
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章