• mysql基础知识点五MVCC


    mysql基础知识点五-MVCC

    1643254819701

    mvvc(Multi-Version Concurrency Control)

    ​ 一句话形容:MVCC机制的实现就是通过read-view机制与undo版本链比对机制,使得不同的事务会根据数据版本链对比规则读取

    基本概念:

    Mysql在可重复读隔离级别下如何保证事务较高的隔离性,我们上节课给大家演示过,同样的sql查询语句在一个事务 里多次执行查询结果相同,就算其它事务对数据有修改也不会影响当前事务sql语句的查询结果。 这个隔离性就是靠MVCC(Multi-Version Concurrency Control)机制来保证的,对一行数据的读和写两个操作默认 是不会通过加锁互斥来保证隔离性,避免了频繁加锁互斥,而在串行化隔离级别为了保证较高的隔离性是通过将所有操 作加锁互斥来实现的。 Mysql在读已提交和可重复读隔离级别下都实现了MVCC机制
    

    下面看一下undo日志版本链与read view机制详解 (这个最重要)

    1. 首先undo日志版本链是一行数据被多次修改后会保留回滚的undolog,并且用俩个隐藏字段trx_id,roll_pointer把这些undolog串联成一个版本链。

    2. read view别名,一致性视图,在事务结束之前不会变化,(读提交隔离级别下一致性视图每次提交都会重新生成),这个视图对应id要和数组中最小id和最大id进行比较,从而得到最终快照

    3. 版本链比对规则

      注意看图片右下角,那是个比对规则
          
      1. trx_id<min_id,表示为已提交
      2. trx_id>max_id, 表示不可见,
      3. min_id<=trx_id<=max_id时,trx_id在视图组中则表示由未提交事务产生不可见,反之可见。
          
       对于删除可以认为是特殊的update,查看该条记录的头信息(record header)里的(deleted_flag)为true,代表删除
      
    4. 关于begin/start transaction的注意事项

      当他们遇到第一个修改语句时,事务才真正启动,向mysql申请事务id。

    Innodb引擎SQL执行的BufferPool缓存机制

    1644310748020

    看上面这个错综复杂的流程,为啥不直接更新磁盘上数据呢?

    1. 首先性能差,一个请求过来就对磁盘文件随机读写,然后在更新数据
    2. 其次磁盘读写能力很差,然后直接更新磁盘文件导致数据库并发能力会很差
    3. mysql这套复杂的机制可以保证更新的是内存bufferPool,然后在顺序写日志,同时海能保证数据一致性。
    4. 这套机制能保证mysql抗住每秒几千的读写
  • 相关阅读:
    【一月の飞雪】(小年快乐!)
    【十二月の博雅闻道】(元旦快乐!)
    【十一月の期中考试总结】
    【十月のA Letter to 后辈菌】
    【九月の文化课生活】(国庆快乐!)
    OI回忆录(流水账)
    SDOI 2017 Round2 滚粗了
    【BZOJ 3456】城市规划
    【Vijos 1998】【SDOI 2016】平凡的骰子
    【HDU 3662】3D Convex Hull
  • 原文地址:https://www.cnblogs.com/xiaoshahai/p/15873836.html
Copyright © 2020-2023  润新知