14.10.2 File Space Management 文件空间管理:
数据文件 你定义在配置文件形成了InnoDB的系统表空间,
文件是逻辑连接形成表空间,没有条带化使用。
你不能定义你的表在表空间中的分配。
为了避免执行来自所有表和索引 在系统表空间, 你可以开启 innodb_file_per_table 配置选项,
会存储新创建的表在一个单独的tablespace 文件(扩展名为.ibd).
对于这种方式存储的表, 有较少的碎片在磁盘文件,
当表被truncate时, 空间返回给操作系统而不是仍旧被保留在Innodb 在系统表空间下
Pages, Extents, Segments, and Tablespaces:
每个表空间由数据库pages组成, 每个tablespace 在MySQL 实例有相同的page size.
默认的, 所有的tablespace 的page size 是16KB,
你可以降低page size 到8KB和4KB 通过指定innodb_page_size 选项,在你创建MySQL 实例的时候
pages 是集合成extents 大小是1MB( 64个连续的16KB pages,或者128 8KB pages,或者256 4KB pages)
files 在表空间内被称为segments( 那些segments 是不同于回滚段, 实际上包含很多表空间segments)
当一个segment 在表空间里,InnoDB 分配一次分配32个pages.
在那以后,InnoDB 开始分配整个extents 给segment.
InnoDB 可以一次加到4个extents 到一个大的segment来确保良好的串行数据。
两个segments 被分配给每个index 在InnoDB里,
一个是用于B树的非叶子块的,另外一个是用于leaf nodes.
保持leaf nodes在磁盘上连续可以更好的顺序的I/O操作,因为这些leaf nodes 包含实际的数据。
一些pages 在tablespace 包含其他Pages的位图,
因此 少量的extents 在InnoDB 表空间不能被分配给segments 作为整体,但是只能是单独的pages.
当你 需要可用的空闲空间在tablespace 通过使用一个SHOW TABLE STATUS statement,
InnoDB 报告extents 明确的空闲的 在tabloespace
当你从表删除数据,InnoDB 搜索相应的B-tree indexes.
不管释放的空间变的可用对于其他用户依赖的 ,不管 删除的模式释放单独的pages或者extents 到表空间。
删除表或者删除所有的记录是保证释放空间给用户,
但是记住 删除的记录是物理的移除只有通过Puege 操作,
这个会自动发生在它们不被事务回滚或者一致性读需要时
How Pages Relate to Table Rows 页于表记录的关系:
最大的行长度,特别是对于可变长度列(VARBINARY, VARCHAR, BLOB and TEXT),
略少于数据库页的一半。
比如, 最大行长度是大约8000字节对于默认的16KB innodb_page_size setting.