当前位置: 首页 > article >正文

mysql官方文档翻译01-innodb多版本并发控制

参考文档: InnoDB Multi-Versioning

1.innodb是一个多版本存储引擎。

它会保存被修改数据行的多个老版本信息以支持事务功能,如并发与回滚。这些信息以回滚段(rollback segment)这种数据结构存储在撤销表空间。详情参见undo tablespace 。

innodb使用回滚段中的信息执行事务回滚时所需的撤销操作。它也使用该信息构建数据行的早期版本以实现一致性读。一致性读参见 consistent nonlocking reads


2.实际上,innodb为每条数据行新增了3个隐藏字段。

  • DB_TRX_ID :表示插入或更新数据行的最后一个事务的事务标识符;而且,删除操作实际上是一种更新,其中数据行的特殊bit被标记为已删除;
  • DB_ROLL_PTR:称为回滚指针; 回滚指针指向一条撤销日志记录。若数据行被更新,撤销日志记录包含重建该行被更新前的内容所需信息。
  • DB_ROW_ID:该字段包含数据行id,该id随着新行插入而单调递增。如果innodb自动生成一个聚簇索引,则该索引包含行id。否则,DB_ROW_ID 不会出现在任何索引中;

3.撤销日志分为插入与更新撤销日志。

插入撤销日志仅在事务回滚时需要,一旦事务提交可以被删除。

更新撤销日志可以用于一致性读,仅当不存在innodb为其分配快照的事务后,更新撤销日志可以删除。而在一致性读中,该快照可能需要更新撤销日志中的信息构建数据行的早期版本。撤销日志参见 undo log


4.建议你定期提交事务,包括仅发出一致性读的事务。

否则,innodb不会删除更新撤销日志中的数据,而且回滚段可能会变得太大,填满它所在的撤销表空间。撤销表空间详情参见undo tablespace 。


5.在innodb多版本控制模式中,当删除sql执行时,一个数据行并不是立即被物理删除。

innodb丢弃删除操作的更新撤销日志记录后才会物理删除对应数据行及其索引。该删除操作称为清除purge。清除操作执行非常快,按照删除sql语句执行的时间顺序执行清理。



【mvcc其他参考资料】

1)非常棒的参考资料:因为有innodb存储引擎的源代码:

https://github.com/bytesfly/blog/blob/master/MySQL/mysql-transaction-innodb-mvcc.md

2)mvcc源码地址=https://github.com/mysql/mysql-server/blob/5.7/storage/innobase/include/read0types.h#L43

3)本地调试mysql源码:

google搜索关键词=【window10 调试mysql源码】

参见 https://juejin.cn/post/7110373798716653599

4)

What is Multi-Version Concurrency Control (MVCC) in DBMS?

5)MVCC多版本并发控制原理总结(最终版)

6)MySQL进阶系列:多版本并发控制mvcc的实现, https://zhuanlan.zhihu.com/p/418300709


http://www.kler.cn/a/510712.html

相关文章:

  • 国家统计局湖北调查总队副总队长张小青一行调研珈和科技农业遥感调查智能化算法
  • 1.6 从 GPT-1 到 GPT-3.5:一路的风云变幻
  • 使用 Java 开发 Android 应用:Kotlin 与 Java 的混合编程
  • 微透镜阵列精准全检,白光干涉3D自动量测方案提效70%
  • unity学习18:unity里的 Debug.Log相关
  • HTML5+Canvas实现的鼠标跟随自定义发光线条源码
  • Docker镜像配置
  • 物联网平台介绍
  • Ubuntu更改apache的服务端口
  • 登录认证(1):登录的基本逻辑及实现思路
  • mybatis xml sql
  • 【C++】结构体(下)
  • 【专题二 二叉树中的深搜】98. 验证二叉搜索树
  • 免费使用 Adobe 和 JetBrains 软件的秘密
  • 【Linux系统编程】—— 进程与进程管理在Linux中的基本概念
  • AI 行业新动态
  • 1.13-1.19
  • 【Spring Boot】掌握 Spring 事务:隔离级别与传播机制解读与应用
  • 数据结构(Java版)第十期:栈和队列(一)
  • 【Django】多个APP设置独立的URL
  • 基于ChatGPT的论文写作辅助工具研究
  • AI 编程工具—Cursor AI 对话模式详解 内嵌对话模式
  • 【C语言】_自定义类型:联合体
  • 国产编辑器EverEdit -重复行
  • 第4章:Python TDD消除重复与降低依赖实践
  • 深度学习python基础(第一节) 变量和数据类型