Mysql的多版本并发控制记录

MVCC实现机制

mvcc的实现依赖于几个字段

  • 表中的隐藏列:

    • row_id:行id,没有主键和唯一列时默认生成的一个隐藏主键,有的话不生成 6字节
    • trx_id:修改该行的事务id、
    • roll_pointer:回滚指针,指向undo log 版本链

    image-20230803104109494

  • ReadView字段:creator_trx_id、m_ids、min_trx_id、max_trx_id

    • creator_trx_id:生成该ReadView的事务id。
    • m_ids:在生成该ReadView时,仍然活跃未提交的事务的id列表。
    • min_trx_id:m_ids中的最小值。
    • max_trx_id:创建ReadView时当前数据库给下一事务的id值。

    image-20230803104041588

访问机制:

  • 如果记录的 trx_id<min_trx_id,说明这个版本的记录在创建ReadView前已经提交的事务生成的,所以该版本记录对当前事务可见。
  • 如果记录的 tex_id>=max_trx_id,说明这个版本的记录时在创建ReadView之后的事务生成的,所以改版记录对当前事务不可见。
  • 如果记录的 tex_id在 min_trx_id 和 max_trx_id 之间
    • 如果 tex_id 在 m_ids中:表示生成该版本记录的事务仍然活跃,所以该版记录对当前事务不可见。
    • 如果 **tex_id 不在 m_ids中:**表示生成该版本记录的事务已经提交,所以该版记录对当前事务可见。

作者:墨鱼-yyyl

出处:https://www.cnblogs.com/moyu-yyyl/p/18009701

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   墨鱼yyyl  阅读(15)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示