关于MySQL mvcc

innodb mvcc

mvcc 多版本并发控制
在RR isolution 情况下 trx在启动的时候就拍了个快照。这个快照是基于整个数据库的。
其实这个快照并不是说拷贝整个数据库。并不是说要拷贝出这100个G的数据。

innodb里面每个trx有一个唯一的trxID 叫做trx id .在trx 开始的时候向innodb系统申请。严格按照申请顺序increment。

而每行数据都是有多个版本。每次trx 更新数据的时候,都会生成一个新的数据版本。并且把trx id赋给这个数据版本的trx id .记录为row trx_id .同时 旧的数据版本要保留。并且在新的数据版本中 能够直接拿到。

也就是说数据表中的一行记录 其实可能有多个版本。每个版本有自己的ID。
在这里插入图片描述
这里v1-v4 都是同一行数据的4个版本。当前最新的版本v4 k=4 是被trxid 40的事务更新。因此她的row trx_id = 25.

这里其实有undo的参与。在sql1 2 3的情况下。而且v1 v2 v3并不是物理情况下存在的。而是通过undo直接计算出来的。

在知道mvcc和row trxid 的概念下。上面说的innodb 的快照的概念。

按照RR的概念 当我这个事务启动的时候 能够看到所有已提交的事务。但是 这个事务执行的时候 其他事务的更新对他不可见。

因此 一个事务只需要在启动的时候说: 以我启动的时候为准。如果一个数据版本是我启动之前生成的,就认。如果是我启动之后生成的。就不认。我必须找到她的上一个版本。当然如果上一个也不可见 再往前找 找到认的为止。

从代码看实现 就是innodb 构建了一个Array 用来保存这个事务启动的时候。当前引擎正在活动的所有事务ID。活动的概念就是 启动了但是还

相关推荐

  1. 关于git

    2024-07-10 09:14:07       42 阅读
  2. 关于数据库

    2024-07-10 09:14:07       65 阅读
  3. 关 于 早 起

    2024-07-10 09:14:07       48 阅读
  4. 关于static

    2024-07-10 09:14:07       46 阅读
  5. 关于%和/

    2024-07-10 09:14:07       44 阅读
  6. 关于BFF

    2024-07-10 09:14:07       40 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 09:14:07       99 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 09:14:07       107 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 09:14:07       90 阅读
  4. Python语言-面向对象

    2024-07-10 09:14:07       98 阅读

热门阅读

  1. Html利用Vue动态加载单文件页面【httpVueLoader】

    2024-07-10 09:14:07       31 阅读
  2. linux:命令执行过程【图表】

    2024-07-10 09:14:07       26 阅读
  3. 系统架构设计师——网络设计

    2024-07-10 09:14:07       33 阅读
  4. SSL证书到期自动巡检脚本-推送钉钉告警

    2024-07-10 09:14:07       30 阅读
  5. 如何才能在Linux下编写驱动程序

    2024-07-10 09:14:07       28 阅读
  6. Tomcat打破双亲委派模型的方式

    2024-07-10 09:14:07       32 阅读
  7. C++惯用法: 通过std::decltype来SFINAE掉表达式

    2024-07-10 09:14:07       24 阅读
  8. HTTP 范围Range请求

    2024-07-10 09:14:07       28 阅读
  9. React 开发报错整理

    2024-07-10 09:14:07       36 阅读