zoukankan      html  css  js  c++  java
  • 多版本并发控制 MVCC简介

    多版本并发控制 MVCC

    高性能 MySQL 第3版 1.4 多版本并发控制
    

    MVCC 是通过保存数据在某个时间点的快照实现的。不同存储引擎的 MVCC 的实现不同,典型的有乐观并发控制和悲观并发控制。

    即为事务创建某个时间点的读一致性视图,保证不同事务查询看到的读一致性视图不一样。

    InnoDB记录存储结构

    innodb 的行记录格式有4中。这里分析 Compact 格式。

    COMPACT行格式

    一条完整的记录其实可以被分为记录的额外信息记录的真实数据两大部分。

    记录的额外信息

    这部分信息是服务器为了描述这条记录而不得不额外添加的一些信息,这些额外信息分为3类,分别是 变长字段长度列表NULL值列表 记录头信息,我们分别看一下。

    变长字段长度列表

    前边说过MySQL支持一些变长的数据类型,比如VARCHAR(M)VARBINARY(M)、各种TEXT类型,各种BLOB类型,这些变长的数据类型占用的存储空间分为两部分:

    1. 真正的数据内容
    2. 占用的字节数

    W 字符集一个字符最大字节数

    M varchar(M) 可变长指定的字符数

    L 字段数据实际的字节数

    W * M < 256 用1字节存储可变长字段字节数

    W * M >= 256

    ​ L < 128 用1字节存储

    ​ L >= 128 用2字节存储

    对于 CHAR(M) 类型的列来说,当列采用的是定长字符集时,该列占用的字节数不会被加到变长字段长度列表,而如果采用变长字符集时,该列占用的字节数也会被加到变长字段长度列表。

    undo log redo log binlog

    记录的真实数据

    记录的真实数据除了我们插入的那些列的数据,MySQL会为每个记录默认的添加一些列(也称为隐藏列),具体的列如下:

    列名 是否必须 占用空间 描述
    row_id 6字节 行ID,唯一标识一条记录
    transaction_id 6字节 事务ID
    roll_pointer 7字节 回滚指针

    需要注意的是,MySQL服务器会为每条记录都添加 transaction_idroll_pointer 这两个列,但是 row_id 只有在表没有定义主键的时候才会为记录添加,相当于MySQL服务器帮我们来添加一个主键。这些列的值不用我们操心,MySQL服务器会自己帮我们添加的。

    MySQL上安装目录

    [root@instance-fjii60o3 ~]# ls /var/lib/mysql
    db2      ib_logfile0  instance-fjii60o3.err  mozq   mysql.sock          RPM_UPGRADE_HISTORY      test
    ibdata1  ib_logfile1  instance-fjii60o3.pid  mysql  performance_schema  RPM_UPGRADE_MARKER-LAST
    
    [root@instance-fjii60o3 mysql]# innodb_space -s ibdata1 system-spaces
    name                            pages       indexes     
    (system)                        1152        7           
    [root@instance-fjii60o3 mysql]# pwd
    /var/lib/mysql
    
    [root@instance-fjii60o3 mysql]# innodb_space -s ibdata1 -T db2/user space-indexes
    id          name                            root        fseg        fseg_id     used        allocated   fill_factor 
    11          ID_IND                          302         internal    144         1           1           100.00%     
    11          ID_IND                          302         leaf        145         0           0           0.00%       
    12          FOR_IND                         303         internal    146         1           1           100.00%     
    12          FOR_IND                         303         leaf        147         0           0           0.00%       
    13          REF_IND                         304         internal    148         1           1           100.00%     
    13          REF_IND                         304         leaf        149         0           0           0.00%       
    14          ID_IND                          305         internal    150         1           1           100.00%     
    14          ID_IND                          305         leaf        151         0           0           0.00%       
    15          PRIMARY                         307         internal    153         1           1           100.00%     
    15          PRIMARY                         307         leaf        154         0           0           0.00%       
    16          PRIMARY                         309         internal    156         1           1           100.00%     
    16          PRIMARY                         309         leaf        157         0           0           0.00%       
    17          GEN_CLUST_INDEX                 311         internal    159         1           1           100.00%     
    17          GEN_CLUST_INDEX                 311         leaf        160         0           0           0.00% 
    
    [root@instance-fjii60o3 mysql]# innodb_space -s ibdata1 -T mozq/record_format_demo space-page-type-summary
    type                count       percent     description         
    ALLOCATED           871         75.61       Freshly allocated   
    SYS                 245         21.27       System internal     
    INDEX               20          1.74        B+Tree index        
    UNDO_LOG            8           0.69        Undo log            
    INODE               4           0.35        File segment inode  
    FSP_HDR             2           0.17        File space header   
    TRX_SYS             1           0.09        Transaction system header
    IBUF_BITMAP         1           0.09        Insert buffer bitmap
    
  • 相关阅读:
    chrome安装插件
    如何在JIRA中有效使用关注和@提及 我正在关注的问题 提及我的问题 在仪表板上显示
    SQL Server中查找包含某个文本的存储过程 SQL 查找存储过程中出现过的文字怎么查询 查询整个数据库中出现的文本 sql 全局搜索
    Postman中添加真实请求(Chrome Networks中的全部请求,含https)copy as har
    SCOPE_IDENTITY 和 @@IDENTITY
    The underlying connection was closed: An unexpected error occurred on a rece
    mybatis中参数为list集合时使用 mybatis in查询
    如何在Mybatis的xml文件调用java类的方法
    Java中List, Integer[], int[]的相互转换
    ASP .NET Core HTTP Error 502.5 – Process Failure
  • 原文地址:https://www.cnblogs.com/mozq/p/12093747.html
Copyright © 2011-2022 走看看