• innodb的page增长方式


    INNODB 独享表空间包括

    数据,索引,插入缓存,数据字典。共享表空间包括:Undo信息(不会回收<物理空间上>),双写缓存信息,事务信息等。

    完整的innodb结构包括

    段(segment):组成表空间,有区组成。
    区(extent):有64个连续的页组成。每个页16K,总共1M。对于大的数据段,每次最后可申请4个区。
    页(page):是INNODB 磁盘管理的单位,有行组成。
    行(row):包括事务ID,回滚指针,列信息等。
    

    建立测试表

    CREATE TABLE `tt` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(10) DEFAULT NULL,
      `age` int(11) DEFAULT NULL,
      `address` varchar(20) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=823 DEFAULT CHARSET=utf8;
    

    python py_innodb_page_info.py ../../run5724/data/t2/tt.ibd -v

    page offset 00000000, page type <File Space Header>
    page offset 00000001, page type <Insert Buffer Bitmap>
    page offset 00000002, page type <File Segment inode>
    page offset 00000003, page type <B-tree Node>, page level <0000>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    Total number of page: 6: //总共6个page
    Freshly Allocated Page: 2 //两个空闲page
    Insert Buffer Bitmap: 1
    File Space Header: 1
    B-tree Node: 1 //一个数据page
    File Segment inode: 1
    

    ls -lh tt.ibd

    -rw-rw---- 1 mysql mysql 96K 2012-10-17 14:26 tt.ibd
    得到的信息是表初始化大小为96K,他是有 Total number of page * 16 得来的。1个数据页,2个可用页面(Freshle Allocated Page)。
    

    为什么没有申请区?

    区是64个连续的页,大小1M。那么表大小也应该是至少1M。但是现在只有96K(默认)。原因是因为每个段开始的时候,
    先有32个页大小的碎片页存放数据,使用完之后才是64页的连续申请,最多每次可以申请4个区,保证数据的顺序。
    这里看出表大小增加是按照至少64页的大小的空间来增加的,即1M增加。
    

    随便写点数据进去

    insert into tt(name,age,address) values('aaa',23,'HZZZ');
    编辑为sql文件,凑成大约五百行,然后进去执行source
    

    ls -lht ../../run5724/data/t2/tt.ibd

    -rw-r----- 1 liuzhuan liuzhuan 128K  3月 17 16:40 ../../run5724/data/t2/tt.ibd
    超出了96k,看看发生了什么
    

    python py_innodb_page_info.py ../../run5724/data/t2/tt.ibd -v

    page offset 00000000, page type <File Space Header>
    page offset 00000001, page type <Insert Buffer Bitmap>
    page offset 00000002, page type <File Segment inode>
    page offset 00000003, page type <B-tree Node>, page level <0001> //空闲page 1上的偏移位置
    page offset 00000004, page type <B-tree Node>, page level <0000>
    page offset 00000005, page type <B-tree Node>, page level <0000>
    page offset 00000006, page type <B-tree Node>, page level <0000>
    page offset 00000000, page type <Freshly Allocated Page> //还有另外一个空闲page
    Total number of page: 8:
    Freshly Allocated Page: 1
    Insert Buffer Bitmap: 1
    File Space Header: 1
    B-tree Node: 4 //四个数据page
    File Segment inode: 1
    

    反复执行source sql文件

    python py_innodb_page_info.py ../../run5724/data/t2/tt.ibd -v
    page offset 00000000, page type <File Space Header>
    page offset 00000001, page type <Insert Buffer Bitmap>
    page offset 00000002, page type <File Segment inode>
    page offset 00000003, page type <B-tree Node>, page level <0001>
    page offset 00000004, page type <B-tree Node>, page level <0000>
    page offset 00000005, page type <B-tree Node>, page level <0000>
    page offset 00000006, page type <B-tree Node>, page level <0000>
    page offset 00000007, page type <B-tree Node>, page level <0000>
    page offset 00000008, page type <B-tree Node>, page level <0000>
    page offset 00000009, page type <B-tree Node>, page level <0000>
    page offset 0000000a, page type <B-tree Node>, page level <0000>
    page offset 0000000b, page type <B-tree Node>, page level <0000>
    page offset 0000000c, page type <B-tree Node>, page level <0000>
    page offset 0000000d, page type <B-tree Node>, page level <0000>
    page offset 00000000, page type <Freshly Allocated Page> //另外一个16k的空闲page
    Total number of page: 15:
    Freshly Allocated Page: 1
    Insert Buffer Bitmap: 1
    File Space Header: 1
    B-tree Node: 11
    File Segment inode: 1
    page总数变为15个,11个数据page,另外一个16k的空闲page还没用到
    

    反复执行source sql文件,填充满另外一个空闲page,让mysql开辟新的区(64个page,每个page 16k)

    source /home/liuzhuan/wintrust23/tt.sql
    

    ls -lht ../../run5724/data/t2/tt.ibd

    -rw-r----- 1 liuzhuan liuzhuan 576K  3月 17 17:10 ../../run5724/data/t2/tt.ibd
    

    liuzhuan@liuzhuan-simos:~/wintrust23/mysql-utils-tool/py_innodb_page_info$ python py_innodb_page_info.py ../../run5724/data/t2/tt.ibd -v

    page offset 00000000, page type <File Space Header> //文件头空间页
    page offset 00000001, page type <Insert Buffer Bitmap> //插入缓存位图页
    page offset 00000002, page type <File Segment inode> //文件段节点
    page offset 00000003, page type <B-tree Node>, page level <0001> //根page
    page offset 00000004, page type <B-tree Node>, page level <0000>
    page offset 00000005, page type <B-tree Node>, page level <0000>
    page offset 00000006, page type <B-tree Node>, page level <0000>
    page offset 00000007, page type <B-tree Node>, page level <0000>
    page offset 00000008, page type <B-tree Node>, page level <0000>
    page offset 00000009, page type <B-tree Node>, page level <0000>
    page offset 0000000a, page type <B-tree Node>, page level <0000>
    page offset 0000000b, page type <B-tree Node>, page level <0000>
    page offset 0000000c, page type <B-tree Node>, page level <0000>
    page offset 0000000d, page type <B-tree Node>, page level <0000>
    page offset 0000000e, page type <B-tree Node>, page level <0000>
    page offset 0000000f, page type <B-tree Node>, page level <0000>
    page offset 00000010, page type <B-tree Node>, page level <0000>
    page offset 00000011, page type <B-tree Node>, page level <0000>
    page offset 00000012, page type <B-tree Node>, page level <0000>
    page offset 00000013, page type <B-tree Node>, page level <0000>
    page offset 00000014, page type <B-tree Node>, page level <0000>
    page offset 00000015, page type <B-tree Node>, page level <0000>
    page offset 00000016, page type <B-tree Node>, page level <0000>
    page offset 00000017, page type <B-tree Node>, page level <0000>
    page offset 00000018, page type <B-tree Node>, page level <0000>
    page offset 00000019, page type <B-tree Node>, page level <0000>
    page offset 0000001a, page type <B-tree Node>, page level <0000>
    page offset 0000001b, page type <B-tree Node>, page level <0000>
    page offset 0000001c, page type <B-tree Node>, page level <0000>
    page offset 0000001d, page type <B-tree Node>, page level <0000>
    page offset 0000001e, page type <B-tree Node>, page level <0000>
    page offset 0000001f, page type <B-tree Node>, page level <0000>
    page offset 00000020, page type <B-tree Node>, page level <0000>
    page offset 00000021, page type <B-tree Node>, page level <0000>
    page offset 00000022, page type <B-tree Node>, page level <0000>
    page offset 00000000, page type <Freshly Allocated Page>
    Total number of page: 36:
    Freshly Allocated Page: 1
    Insert Buffer Bitmap: 1
    File Space Header: 1
    B-tree Node: 32
    File Segment inode: 1
    一共36个page,36*16就是文件大小,符合576K的size设定,更细的换算就是[32(空闲page)*16=512K + 4(结构page)*16=64]
    

    这里开始要是再插入的话,应该申请最少1M的页(64*16 新的区)

    ls -lht ../../run5724/data/t2/tt.ibd 
    -rw-r----- 1 liuzhuan liuzhuan 2.0M  3月 17 17:15 ../../run5724/data/t2/tt.ibd
    

    python py_innodb_page_info.py ../../run5724/data/t2/tt.ibd -v

    page offset 00000000, page type <File Space Header>
    page offset 00000001, page type <Insert Buffer Bitmap>
    page offset 00000002, page type <File Segment inode>
    page offset 00000003, page type <B-tree Node>, page level <0001>
    page offset 00000004, page type <B-tree Node>, page level <0000>
    page offset 00000005, page type <B-tree Node>, page level <0000>
    page offset 00000006, page type <B-tree Node>, page level <0000>
    page offset 00000007, page type <B-tree Node>, page level <0000>
    page offset 00000008, page type <B-tree Node>, page level <0000>
    page offset 00000009, page type <B-tree Node>, page level <0000>
    page offset 0000000a, page type <B-tree Node>, page level <0000>
    page offset 0000000b, page type <B-tree Node>, page level <0000>
    page offset 0000000c, page type <B-tree Node>, page level <0000>
    page offset 0000000d, page type <B-tree Node>, page level <0000>
    page offset 0000000e, page type <B-tree Node>, page level <0000>
    page offset 0000000f, page type <B-tree Node>, page level <0000>
    page offset 00000010, page type <B-tree Node>, page level <0000>
    page offset 00000011, page type <B-tree Node>, page level <0000>
    page offset 00000012, page type <B-tree Node>, page level <0000>
    page offset 00000013, page type <B-tree Node>, page level <0000>
    page offset 00000014, page type <B-tree Node>, page level <0000>
    page offset 00000015, page type <B-tree Node>, page level <0000>
    page offset 00000016, page type <B-tree Node>, page level <0000>
    page offset 00000017, page type <B-tree Node>, page level <0000>
    page offset 00000018, page type <B-tree Node>, page level <0000>
    page offset 00000019, page type <B-tree Node>, page level <0000>
    page offset 0000001a, page type <B-tree Node>, page level <0000>
    page offset 0000001b, page type <B-tree Node>, page level <0000>
    page offset 0000001c, page type <B-tree Node>, page level <0000>
    page offset 0000001d, page type <B-tree Node>, page level <0000>
    page offset 0000001e, page type <B-tree Node>, page level <0000>
    page offset 0000001f, page type <B-tree Node>, page level <0000>
    page offset 00000020, page type <B-tree Node>, page level <0000>
    page offset 00000021, page type <B-tree Node>, page level <0000>
    page offset 00000022, page type <B-tree Node>, page level <0000>
    page offset 00000023, page type <B-tree Node>, page level <0000>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000040, page type <B-tree Node>, page level <0000>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    page offset 00000000, page type <Freshly Allocated Page>
    Total number of page: 128:
    Freshly Allocated Page: 91
    Insert Buffer Bitmap: 1
    File Space Header: 1
    B-tree Node: 34
    File Segment inode: 1
    page总数从36跳到了128,因为已经用完了32个碎片页,新的page会采用区的方式进行空间申请。信息中看到有很多空闲page(凑成了一个区),正好说明这点
    
  • 相关阅读:
    JQuery使用总结
    JS应用总结
    Base64数据转成Excel,并处理Excel的格式
    HTTP压缩
    谷歌开发工具解析
    .Net LIst排重
    MySql日志系统
    .Net生成PDF流
    Mysql MVCC
    JAVA期末综合课程设计
  • 原文地址:https://www.cnblogs.com/liuzhuan23/p/14550736.html
Copyright © 2020-2023  润新知