zoukankan      html  css  js  c++  java
  • 每日一个知识点:MVCC是什么

    每日一个知识点系列的目的是针对某一个知识点进行概括性总结,可在一分钟内完成知识点的阅读理解,此处不涉及详细的原理性解读,只作为一种抛砖引玉。真正的理解一定是你自我研究探索所收获的知识。

    爱生活,爱编码,本文已收录架构技术专栏关注这个喜欢分享的地方。

    开源项目:

    MVCC,Multi-Version Concurrency Control,多版本并发控制

    数据库有四种隔离级别,通过MVCC在每种查询下的情况也是不一样的。

    在每次insert 、update 、delete都会生成一个事物id,事物id 是递增的。聚簇索引记录中都包含两个必要字段 trx_id 、roll_pointer ,每次修改都会生成undo日志(insert没有,因为没历史)。

    这里有几个主要就是概念就是版本链、readview。

    版本链:

    对于使用InnoDB存储引擎的表来说,它的聚簇索引记录中都包含两个必要的隐藏列(row_id并不是必要的,我们创建的表中有主键或者非NULL唯一键时都不会包含row_id列)

    • trx_id:每次对某条聚簇索引记录进行改动时,都会把对应的事务id赋值给trx_id隐藏列。

    • roll_pointer:每次对某条聚簇索引记录进行改动时,都会把旧的版本写入到undo日志中,然后这个隐藏列就相当于一个指针,可以通过它来找到该记录修改前的信息。

    Readview:

    (每种隔离级别也不太一样),主要包含当前系统中还有哪些活跃的读写事务,把它们的事务id放到一个列表中,把这个列表命名为为m_ids,根据版本链trx_id 和m_ids 的比较来进行版本选择(具体规则可以自己查查)

    • READ COMMITTED(用到版本链):每次读取数据前都生成一个ReadView(在每一个select操作前都生成ReadView)
    • REPEATABLE READ(用到版本链):在第一次读取数据时生成一个ReadView(只在第一次进行普通SELECT操作前生成一个ReadView
    • READ UNCOMMITTED: 直接读取记录的最新版本
    • SERIALIZABLE:使用加锁的方式来访问记录

    爱生活,爱编码,本文已收录架构技术专栏关注这个喜欢分享的地方。

    开源项目:

  • 相关阅读:
    基于51单片机的独立按键和矩阵按键用法
    基于51单片机,蜂鸣器和led每秒1滴1亮的程序
    基于51单片机,3秒1亮的程序
    n个灯,隔m个依次点亮的具体情况方法
    单片机的定时器
    有关芯片的认识
    MATLAB变量
    二组玩法介绍
    tkinter的GUI界面
    magento 物流问题
  • 原文地址:https://www.cnblogs.com/jiagoujishu/p/13809536.html
Copyright © 2011-2022 走看看