欢迎光临
我们一直在努力

Mysql:简单易懂了解MVCC

一句话说清楚

MVCC = 多版本并发控制 = 每个事务看到的是数据库在某个时间点的\”快照\”,而不是实时数据。

用一个生活中的例子理解

场景:银行账户余额查询

想象你在银行查询余额:

没有 MVCC 的情况(加锁)

1. 你开始查询余额:1000元
2. 同时,你老婆在转账:-500元
3. 银行说:\”等等!你老婆正在操作,你等会儿再查\”
4. 你被阻塞,直到转账完成

问题:读操作被写操作阻塞

有 MVCC 的情况

1. 你开始查询余额:1000元
2. 同时,你老婆在转账:-500元
3. 银行说:\”你查你的,她转她的,互不影响\”
4. 你看到的是查询开始时的余额:1000元
5. 你老婆转账完成后,余额变成500元
6. 你下次查询才会看到500元

优点:读写不冲突,读操作看到的是一致性快照

技术原理(核心概念)

MVCC 主要依赖以下三个关键技术来实现:

1. 数据的三个隐藏字段

InnoDB 引擎会为每一行数据自动添加三个我们看不见的隐藏字段:

  • DB_TRX_ID(6字节):最近修改/创建本行数据的事务ID。记录是哪个事务生成了这个数据版本。
  • DB_ROLL_PTR(7字节):回滚指针。指向这条数据的上一个版本的地址(存储在 Undo Log 中)。它就像一条链表的指针,把同一个数据的多个版本串联起来。
  • DB_ROW_ID(6字节):行ID。如果表没有主键,InnoDB 会用它生成聚簇索引。
2. Undo Log(回滚日志)
  • 作用:存储数据旧版本的“档案馆”。
  • 当一行数据被更新时,旧版本的数据不会立刻删除,而是会被拷贝到 Undo Log 中,并通过 DB_ROLL_PTR 指针形成一个版本链。
  • 这个版本链使得事务可以根据需要找到任何历史版本的数据。
  • </

赞(0)
未经允许不得转载:171主机测评 » Mysql:简单易懂了解MVCC
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址