Innodb逻辑存储机制

时间:2022-03-04 07:38:03

Innodb逻辑存储机制

Innodb的逻辑存储单元是由大到小分别是tablespace segment exetent pageblock)组成

表空间(tablespace

所有数据都存在表空间中,启用参数innodb_file_per_table,则每张表内的数据可以单独放到一个表空间中,每张表空间中存放的只是数据,索引和插入缓冲其他类的数据,如undo信息,系统事务信息,二次写缓冲等还是存放在原来的共享表空间;

段(segment

常见的segment有数据段,索引段,回滚段

Innodb是索引聚集表,所以数据就是索引,索引就是数据数据段即是B+树的页节点(leaf node segment),索引段即为B+树的非索引节点(non-leaf node segment);

段的管理是由引擎本身完成的.

区(extent

区是由64个连续的页组成每个页的大小为16k,即每个区的大小为(64*16=1MB,对于大的数据段,mysql每次最多申请4个区,一次保证数据顺序本能;

页(page

页是innodb磁盘管理最小单位,Innodb每个页的大小是16K

常见数据类型有:

数据页B-tree NODE

Undoundo log page

系统页systempage

事务数据页system page

插入缓冲位图页insert buffer bitmap

插入缓冲空闲列表页insertbuffer freebitmap

未压缩二进制大对象页uncompressedBLOB page

压缩二进制大对象页compressedBLOB page

行(row

Innodb存储引擎是面向行的(row-oriented)也就是数据存放按行存放;

每个页最多可以存放16K/2---200行,也就是7992个行;

每个page大小是16K;

64个连续的page组成一个extent1mb);

多个extendpage组成segment;

Segment初始化时,会先初始化32page,之后根据需要将extent分配给segment,单次最多分配4extentssegment;

Innodb中一个索引(b-tree)由两个segment组成,其中所有叶子节点(leaf node)存放在一个segment中(更连续,更高效)所有非叶子节点(non leaf nodes)存放在一个segment中;

行记录( row )存放在数据页中( page )里, page 是由 page header  ,page trailer , page body 组成.