乐趣区

关于mysql:MVCC机制

一. MVCC 机制

Multi-version Concurrency Controller 简称 MVCC, 是为了进步数据库的并发读写能力,不加锁就能够让多个事物实现并发读写

Mysql 会为每一行记录生成两个字段,trx_id(事物 id), roll_pointer(回滚指针), 执行一个事务批改每一条数据的时候,会并将原来的数据复制一份,生成 undo log, 并批改原来数据相应的属性,将数据的 roll_pointer(回滚指针) 指向 undo log

undo log 指事务开始之前,在操作任何数据之前, 首先将需操作的数据备份到一个中央

mysql 在执行查问的时候,会生成一个一致性视图 read-view, 它由以下几个局部组成:

  1. 执行查问时所提交的 trx_id 数组
  2. 数组外面最小的 id(min_id)
  3. 已创立的最大事务 id(max_id)

查问的数据后果要依据 read-view 做比照从而失去快照后果,

当隔离级别为可反复读的时候:在同一个事物执行查问,会沿用事物刚开始的 read-view,

当隔离级别在度已提交的时候:每生成一条查问语句,会生成一个 read-view

mysql 会沿着以后数据往 undo log 找,

  • 如果 trx_id 小于 min_id, 则事物在查问之前就曾经提交,数据可见
  • 如果 trx_id 大于 max_id, 则事物在查问之前还没生成,数据不可见
  • 若数据的 trx_id 在查问的未提交事物列表

    1. 如果数据的 trx_id 是以后事物,则数据可见
    2. 如果数据的 trx_id 不是以后事物,则数据不可见

对于删除数据的状况,会将版本链上最新的数据复制一份,而后将 trx_id 批改成删除操作的 trx_id, 同时在该记录的头信息(record_header)里的 delete flag 标记为写上 true, 示意以后记录曾经被删除,在依照上述规定查问的时候如果查到的 delete flag 标记为为 true 的时候,不返回数据

退出移动版