表空间

来源:互联网 发布:win10正在准备windows 编辑:程序博客网 时间:2024/05/19 10:55

表空间

可以看做是InnoDB存储引擎逻辑结构的最高层,所以数据都是放在表空间中。默认情况下InnoDB存储引擎有一个共享表空间ibdata1,所以的数据都是放在这个表空间中。如果启用了innodb_file_per_table,那么每张表内的数据可以单独放到一个表空间内。
开启了innodb_file_per_table后,每张表的表空间内存放的只是数据、索引和插入缓冲,其他类型的数据,如Undo系统事务信息、二次写缓冲(double write buffer)等还是存放在原来的共享表空间内

常见的段有数据段,索引段、回滚段等。那么数据段即为B+树的页节点(leaf node segment),索引段即为B+树的非索引节点(non-leaf node segment)
不是每个对象都有段,表空间是由分散的页和段组成。

区是由64个连续的页组成,每个页大小为16KB,即每个区大小为1MB。对于大数据段,InnoDB最多每次可以申请4个区,以此保证数据的顺序性能。
启用了参数innodb_file_per_table后,创建的表默认是96KB。区是64个连续页,那么创建表大小是1MB才对啊?其实是因为每个段 开始时,有32个页大小的碎片页来存放数据,当这些页使用完了才是64个连续页的申请。

页是InnoDB磁盘管理的最小单位。
常见的页类型有
数据页:
Undo页:
系统页:
事务数据页:
插入缓冲位图页
插入缓冲空闲列表页:
未压缩的二进制大对象页:
压缩的二进制大对象页:

InnoDB存储引擎是面向行的.
页中保存着表中一行行的数据。

变长字段长度列表NULL标志位记录头信息列1数据列2数据


  • Compact行格式首部是一个非NULL变长字段长度列表,而且是按照列的顺序逆序放置的。当列长度的小于255个字节,用1字节表示;
    若大于255个字节,用2个字节表示;变长字段的长度最大不可以超过2个字节。
  • 第二个部分是NULL标志位,该位指示了该行数据中是否有NULL值,用1表示,应该是bytes
  • 记录头信息(record header),固定占用5个字节(40位)
  • 每行数据除了用户定义的行外,还有两个隐藏列,事务ID列和回滚指针列,分别为6个字节和7个字节的大小。如果没有Primary Key,每行还会增加一个6字节的RowID列。
  • 名称大小描述()1未知()1未知delete_flag1该行是否已经被删除min_rec_flag1为1,如果该记录是预先被定义为最小的记录n_owned4该记录拥有的记录数heap_no13所以堆中该条记录的排序记录record_type3记录类型000=普通 001=B+树节点指针 010=Infimum 011=Supremum 1xx=保留next_recorder16页中下一条记录的相对位置

    InnoDB在页内部是通过一种链表的结果来串联各个行记录的

    表由共享空间、日志文件组、表结构定义文件组成

    以.ibd结尾,数据、索引、表的内部数据字典信息都保存在这个单独的表空间文件;表结构定义文件以frm结尾

    原创粉丝点击