zoukankan      html  css  js  c++  java
  • mysql MVCC

    简介

    面试常问
    MVCC 多版本并发控制 基于快照读, 快照类似于 虚拟机的快照??

    参考链接

    https://www.bilibili.com/video/BV1t5411u7Fg?from=search&seid=16113061376237420744

    知识点~~

    • MVCC防止读写锁竞争

    • 原子性使用undo log

      其中 回滚指针可以回到上一个版本
      trx_id 事物id. 每进行一个操作事物id自增

    • 持久性使用的是 redo log

    • 隔离性通过加锁+MVCC来实现

    • readView作用
      让你在版本链中找到你想要的版本
      m_ids 表示在生成readView时当前系统中活跃的读写事物的事物id类别
      min_trx_id 表示在生成readView是当前系统中活跃的读写事物中最小的事物id, 也就是m_ids中的最小值
      max_trx_id 表示在生成ReadView是系统中应该分配给下一个事物的id值
      creator_trx_id 表示生成改readView的事物的事物id

    • readView如何判断版本联众的那个版本可用

    trx_id == creator_trx_id 可以访问这个版本
    trx_id < min_trx_id: 可以访问
    trx_id > max_trx_id: 不可以访问
    min_trx_id <= trx_id <= max_trx_id 如果trx_id在m_ids中是不可以访问这个版本, 反之可以 这个范围里面的是 活跃的未提交的commit的事物,

    • MVCC 主要针对RC和RR
      对于读已提交, select 方法会生成一个ReadView
      对于可重复读, 每个select 生成的是同一个readView

    • 间隙锁 解决幻读的问题
      RR级别自动开启了间隙锁

    • mysql 底层使用B+数

    • B树的演示
      cs.usfca.edu/~galles/visualization/BTree.html
      B数2个节点, 树变矮了, B树存在回旋查找问题
      每个节点存储数字

    • B+数
      叶子结点存储数据
      非叶子节点存储索引
      解决回旋查找

    • 索引失效

    左前缀法则,
    like失效.
    复合索引, 逻辑上就是多端有序, 哈哈, 就是 (a,b,c) , 然后a有序, 在a相等的情况下b有序, 在A和B相等的情况下c有序

    • innodb 使用的是聚簇索引, myisam 使用的是非聚簇索引
      什么是聚簇索引, 将数据和索引放在了一块

    • 由于索引失效 行锁升级为表锁

    • 间隙锁
      把1-9 范围加锁, 1, 3, 5, 7, 9
      如果插入4 会被锁住, 就是间隙锁

    • undo log
      基于返回的操作, insert 然后回滚的时候 delete
      update 使用 相反的 update

    • redo log
      持久性.
      有一个buffer, 来进行读写操作, 加快操作的同时造成系统风险, 如果宕机了, buffer中的数据也丢失了
      先写入到日志中, 再更新到buffer中, buffer中的数据基于随机IO, log中的数据是追加模式的, 顺序性.
      buffer以一个mysql数据页进行写入的, 一个数据页的大小是16k.
      redo log 只要写入真正的数据修改就可以了

    Hope is a good thing,maybe the best of things,and no good thing ever dies.----------- Andy Dufresne
  • 相关阅读:
    我是新手,我在学Android
    WAMP环境下(apache2.2.21+Php5.3.10)编写PHP扩展
    java中三种字符串正则匹配方式
    PHP扩展开发过程中的问题
    Android错误解决方法之:Debug certificate expired on
    Ubuntu下C++开发PHP开发扩展的注意事项
    我的笔试题
    很多时候,是否好好看完一本好书,对一个人的提升往往能达到质的区别
    C语言常用宏定义
    Linux下用C++开发PHP扩展
  • 原文地址:https://www.cnblogs.com/eat-too-much/p/15108469.html
Copyright © 2011-2022 走看看