表空间

表空间

可以看做是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结尾

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值