前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mvcc【中】记录行结构

mvcc【中】记录行结构

作者头像
平凡的学生族
发布2019-10-08 16:37:07
4610
发布2019-10-08 16:37:07
举报
文章被收录于专栏:后端技术后端技术

参考

基本工作原理

  • 记录行结构与mvcc息息相关。实际上,每一行除了数据列,还包含额外的字段
  • 其次,undo log也与mvcc相关。在进行update/delete操作时,老记录会被复制到rollback segment形成undo log,这个undo log就是历史记录。然后再在当前记录上修改,以表示当前的update/delete操作。

额外字段

讨论中用到的额外字段是:

  • DB_TRX_ID:导致此记录生成的事务ID。
    • deleted_bit为0时,表示insert或update该记录的事务id。
    • deleted_bit为1时,表示delete
  • DB_ROLL_PTR:指向当前记录项的undo信息。顺着该指针可以不断追溯过去的记录。
  • deleted_bit: 表示该行是否是删除操作
  • DB_ROW_ID: 聚簇索引没有指定主键时会扩充,作为隐藏的主键id。

数据库操作对行结构的影响

  1. UPDATE
    • 行记录数据复制到undo log
    • 原地更新行记录(当做新操作的行记录):
      • 当前事务ID写入DB_TRX_ID
      • 那条undo log的地址写入DB_ROLL_PTR
  2. DELETE
  3. 和update一样,复制到undo log并原地更新行记录。只是增加deleted_bit设置
  4. INSERT
  5. 生成undo log。产生的Undo日志可以在事务提交后直接删除(谁会对刚插入的数据有可见性需求呢)
  6. 插入行记录数据,当前事务ID写入db_trx_id, db_roll_ptr为空

在InnoDB里,UPDATE和DELETE操作产生的Undo日志被归成一类,即update_undo。

总结

行结构除了用于实现原子操作,也用于实现mvcc。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.10.02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参考
  • 基本工作原理
  • 额外字段
  • 数据库操作对行结构的影响
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档