14.9.2 File Space Management

14.9.2 File Space Management

数据文件 你定义在配置文件。 文件是逻辑上连接形成表空间,

没有条带来使用。你不能定义在表空间里你的表是分配在哪里。 在一个新创建的表空间,

InnoDB 分配空间从第一个数据文件开始。

为了避免执行 来自所有表和索引在系统表空间,你可以启用innodb_file_per_table 配置选项,

存储最新创建的表在单独的表空间文件(扩展名为.ibd).

表以这种存储方式, 会较少的碎片在磁盘文件,

当表被truncate后, 空间返还给操作系统 相比仍旧被InnoDB占用在系统表空间模式。

Pages, Extents, Segments, and Tablespaces 页,Extents,段,和表空间

每个表空间 有数据页组成, 每个表空间在MySQL 实例有相同的page size.

默认的, 所有的表空间 的页大小是16KB,你可以降低page size 到8KB或者4KB 通过指定

innodb_page_size 选项 当你创建MySQL instance.

pages 被分组成extents 大小为1MB( 64连续 16KB页,或者128 8KB 页,或者 256 4KB页).

文件 在一个表空间是被称为 segment 在InnoDB.

(这些segment 是不同于回滚段,这实际上是包含了很多的segments)

当一个segments 在表空间内增长,InnoDB 一次分配 第一个32 页,

在那以后,InnoDB 开始分配整个extents 到segment. InnoDB 可以一次增加到4个extents

成为一个大的segment 来确保一个好的串行的数据。

2个segments 会被分配给每个index 在InnoDB.一个是用于B树的非叶子节点,

另外一个是用于leaf 节点。保持 leadf nodes 临近的 在磁盘上 可以有更好的顺序I/O操作,

因为那些leaf nodes 包含了实际的表数据。

一些页在表空间里包含了 一些页的bitmap, 因此有一个很小的extents 在一个InnoDB 表空间

不能被分配给segments 作为整个, 但只是作为单独的页面。

当你寻味可用的空闲空间在tablespace 通过执行SHOW TABLE STATUS statement,

InnoDB 显示 extents是空闲的 在表空间里,

InnoDB 总是保留一些extents用于清理和其他的内部目的,

那些保留的extents 是不包含在空闲表空间的。

当你从表删除数据,InnoDB 缩小相应的B-tree 索引。

释放的空间是否变的可用对于其他的用户取决于是否 删除的单独的页面的模式或者 表空间的extents.

drop 一个表或者删除所有的记录是保证释放空间的对于其他用户,

但是记住 删除记录是物理删除只有在purge 操作,会自动发送有时候在你不需要用于回滚或者一致性读。

How Pages Relate to Table Rows。

原文地址:https://www.cnblogs.com/hzcya1995/p/13351155.html