MVCC版本链
2021-01-28 23:13
标签:次数 bec innodb 链表 没有 级别 重要 数据 loading 对于使用 每次对记录进行改动,都会记录一条 对该记录每次更新后,都会将旧值放到一条 ReadView和版本的生成时间? 所以在事务并发的场景下,如果本事务存在对数据的改动,要注意记录trx_id的变化对接下来数据可见性的影响。 MVCC版本链 标签:次数 bec innodb 链表 没有 级别 重要 数据 loading 原文地址:https://www.cnblogs.com/jmliao/p/13207208.htmlInnoDB
存储引擎的表来说,它的聚簇索引记录中都包含两个必要的隐藏列:
trx_id
:每次一个事务对某条聚簇索引记录进行改动时,都会把该事务的事务id
赋值给trx_id
隐藏列。roll_pointer
:每次对某条聚簇索引记录进行改动时,都会把旧的版本写入到undo日志
中,然后这个隐藏列就相当于一个指针,可以通过它来找到该记录修改前的信息。undo日志
,每条undo日志
也都有一个roll_pointer
属性(INSERT
操作对应的undo日志
没有该属性,因为该记录并没有更早的版本),可以将这些undo日志
都连起来,串成一个链表,所以现在的情况就像下图一样:undo日志
中,就算是该记录的一个旧版本,随着更新次数的增多,所有的版本都会被roll_pointer
属性连接成一个链表,我们把这个链表称之为版本链
,版本链的头节点就是当前记录最新的值。另外,每个版本中还包含生成该版本时对应的事务id
,这个信息很重要,在根据ReadView判断版本可见性的时候会用到。
上一篇:PHP-AC自动机
下一篇:PHP常用六大设计模式