InnoDB是一个多版本的存储引擎它保留有关已更改行的旧版本的信息以支持事务功能,例如并发和回滚。该信息以称为rollback segment的数据结构存储在系统表空间或撤消表空间中。InnoDB 使用rollback segment中的信息来执行事务回滚所需的撤消操作。它还使用这些信息来构建行的早期版本以实现一致读取。

在内部,InnoDB为存储在数据库中的每一行添加三个字段

一个 6 字节DB_TRX_ID字段指示插入或更新行的最后一个事务的事务标识符。此外,删除在内部被视为更新,其中设置了行中的特殊位以将其标记为已删除。

DB_ROLL_PTR称为roll pointer的 7 字节字段。roll pointer指向写入回滚段的undo log record。如果该行被更新,undo log记录包含在更新前重建该行内容所需的信息。

一个 6 字节的DB_ROW_ID字段包含一个行 ID,随着插入新行而单调增加。如果 InnoDB自动生成聚集索引,则该索引包含行 ID 值。否则,该 DB_ROW_ID列不会出现在任何索引中。

回滚段中的undo log分为插入和更新undo logInsert undo log仅在事务回滚时需要,并且可以在事务提交后立即丢弃。更新撤消日志也用于一致性读取,但只有在没有事务存在且为其InnoDB分配快照的情况下才能丢弃它们 ,在一致性读取中可能需要更新撤消日志中的信息来构建较早版本的数据库排。有关撤消日志的其他信息,请参阅第 14.6.7 节,“撤消日志”。

建议您定期提交事务,包括仅发出一致读取的事务。否则, InnoDB无法从更新撤消日志中丢弃数据,并且回滚段可能会变得过大,填满其所在的表空间。有关管理撤消表空间的信息,请参阅第 14.6.3.4 节,“撤消表空间”。

回滚段中撤消日志记录的物理大小通常小于相应的插入或更新行。您可以使用此信息来计算回滚段所需的空间。

在InnoDB多版本控制方案中,当您使用 SQL 语句删除某行时,不会立即从数据库中物理删除该行。InnoDB只有在丢弃为删除而写入的更新撤消日志记录时,才物理删除相应的行及其索引记录。这种删除操作称为purge,它非常快,通常与执行删除操作的 SQL 语句花费的时间顺序相同。

如果您在表中以大致相同的速度以相同的速度以小批量插入和删除行,清除线程可能会开始滞后,并且由于所有“死”行,表会变得越来越大 ,从而使所有内容都受磁盘限制并且非常慢的。在这种情况下,通过调整innodb_max_purge_lag系统变量来限制新行操作,并为清除线程分配更多资源 。有关更多信息,请参阅 第 14.8.10 节,“清除配置”。

总结

  • 在内部,InnoDB为存储在数据库中的每一行添加三个字段
  • InnoDB的删除其实并不会立刻删除,只是先标记一下
  • InnoDB用rollback segment回滚获取历史版本数据

参考

MySQL :: MySQL 5.7 Reference Manual :: 14.3 InnoDB Multi-Versioning

InnoDB如何实现多版本相关推荐

  1. InnoDB 事务/锁/多版本分析?你了解多少?

    目录 • InnoDB事务 – 事务结构/功能 – XA事务/Group Commit – mini-transaction• InnoDB锁 – 锁结构/类型/功能 – 锁等待/死锁检测 – 自增序 ...

  2. mysql mvcc undo_Mysql Innodb中undo-log和MVCC多版本一致性读 的实现

    http://blog.sina.com.cn/s/blog_4673e603010111ty.html 本文主要介绍mysql中innodb引擎undo-log和事务中MVCC多版本一致性读的实现. ...

  3. Mysql存储引擎MyIsAM和InnoDB区别

    Mysql 数据库中,最常用的两种引擎是innordb 和myisam.InnoDB 是Mysql 的默认存储引擎. 两者的区别: 1.事务处理上方面 MyISAM:强调的是性能,查询的速度比Inno ...

  4. Mysql存储引擎详解(MyISAM与InnoDB的区别)

    Mysql存储引擎详解(MyISAM与InnoDB的区别) 存储引擎     MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平 ...

  5. InnoDB MySQL 全文索引 学习笔记

    最近在学习MySQL全文索引的知识,基本搞清了功能以及使用方式,整理了相关资料分享出来一起学习进步哈 目录 1. 倒排索引 2. InnoDB全文检索 3. MySQL全文检索 3.1 Natural ...

  6. mysql innodb 事务_Mysql InnoDB事务

    事务特点 ACID ATOMICITY:原子性 一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作,这 ...

  7. mysql8 修改密码_最新版本mysql8.0.18windows x64部署手册

    mysql是Web世界中使用最广泛的数据库服务器.SQLite的特点是轻量级.可嵌入,但不能承受高并发访问,适合桌面和移动应用.而mysql是为服务器端设计的数据库,能承受高并发访问,同时占用的内存也 ...

  8. 诸葛io的技术架构图_【总结】MySQL技术内幕二:InnoDB存储引擎技术特性

    二.InnoDB存储引擎 InnoDB是事务安全的MySQL存储引擎,通常是OLTP应用中核心表的首选存储引擎.同时,也正是因为InnoDB的存在,才使MySQL数据库变得更有魅力. 从MySQL 5 ...

  9. mysql存储引擎中INNODB和MyISAM的区别

    切记:存储引擎是基于表的,而不是数据库. 存储引擎概念: MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不 ...

最新文章

  1. 7行Python代码,搭建可以识花的机器学习App|视频教程
  2. 【转】java提高篇(十)-----详解匿名内部类
  3. 国际10-20标准电极位置
  4. Java数据结构和算法:数组、单链表、双链表
  5. java 数据类型model_如何在角度2中使用类数据类型的ngModel?
  6. 什么是Tomcat响应静态资源?
  7. 前端学习(3219):...扩展
  8. 浅谈CS0433的错误的类型
  9. POJ2104 K-th Number (平方分割 + 二分)
  10. 这样的高颜值网易云音乐,是你想要的吗?
  11. [IT技术]改变计算技术的伟大算法
  12. 笨方法学Python
  13. Mac怎么读写NTFS格式?Mac读写NTFS格式硬盘教程
  14. 解决谷歌浏览器 Google Chrome不能拖拽安装离线插件的办法
  15. 多合一音乐搜索器项目源码分享,支持播放,下载
  16. Error:..\FreeRTOS\queue.c,1088
  17. win10系统服务器异常,win10提示内部服务器错误500如何解决-解决win10内部服务器错误500的方法 - 河东软件园...
  18. 【入门讲解】Python使用OpenCV设置图片尺寸。
  19. delphi获取外网IP
  20. 这不是而且不能成为“一切照旧”

热门文章

  1. 初识Redis educoder
  2. linux docker状态,Linux之Docker
  3. 如何使用SSH密钥登录你的云服务器?使用SSH密钥的好处
  4. gom引擎登录器_GOM传奇引擎微端配置详细架设语音教程
  5. linux mysql 5.7.13 安装_mysql 5.7.13 安装配置方法图文教程(linux)
  6. 沙洋有几个微服务群_QQ群控系统强力黑科技,助力你实现自动化获客
  7. Matlab重建信号实验总结,实验三信号采样与重建(实验报告).doc
  8. 与计算机运算速度相关参数,计算机CPU运算速度是多少
  9. android 大图 分块,android 大文件分割上传(分块上传)
  10. css未生效,css文件引入后出现某些标签生效某些不生效