默认情况下,当每个表一个文件表空间或通用表空间需要更多空间时,表空间会根据以下规则增量扩展:
如果表空间的大小小于一个扩展,则每次扩展一页。
如果表空间的大小大于 1 个扩展但小于 32 个扩展,则每次扩展一个扩展。
如果表空间的大小超过 32 个扩展,则每次扩展四个扩展。
有关扩展大小的信息,请参见 第 17.11.2 节,“文件空间管理”。
每个表一个文件表空间或通用表空间扩展的大小可以通过指定 AUTOEXTEND_SIZE
选项进行配置。配置更大的扩展大小可以帮助避免碎片并促进大量数据的摄取。
要配置每个表一个文件表空间的扩展大小,请在 CREATE TABLE
或 ALTER TABLE
语句中指定 AUTOEXTEND_SIZE
大小。
Press CTRL+C to copyCREATE TABLE t1 (c1 INT) AUTOEXTEND_SIZE = 4M; ALTER TABLE t1 AUTOEXTEND_SIZE = 8M;
要配置通用表空间的扩展大小,请在 CREATE TABLESPACE
或 ALTER TABLESPACE
语句中指定 AUTOEXTEND_SIZE
大小。
Press CTRL+C to copyCREATE TABLESPACE ts1 AUTOEXTEND_SIZE = 4M; ALTER TABLESPACE ts1 AUTOEXTEND_SIZE = 8M;
AUTOEXTEND_SIZE
选项也可以在创建撤消表空间时使用,但撤消表空间的扩展行为有所不同。有关更多信息,请参见 第 17.6.3.4 节,“撤消表空间”。
AUTOEXTEND_SIZE
设置必须是 4M 的倍数。指定不是 4M 倍数的 AUTOEXTEND_SIZE
设置将返回错误。
AUTOEXTEND_SIZE
默认设置为 0,这会导致表空间根据上述默认行为进行扩展。
允许的最大 AUTOEXTEND_SIZE
为 4GB。最大表空间大小在 第 17.21 节,“InnoDB 限制” 中进行了描述。
最小 AUTOEXTEND_SIZE
设置取决于 InnoDB
页大小,如以下表格所示:
InnoDB 页大小 | 最小 AUTOEXTEND_SIZE |
---|---|
4K |
4M |
8K |
4M |
16K |
4M |
32K |
8M |
64K |
16M |
默认 InnoDB
页大小为 16K(16384 字节)。要确定 MySQL 实例的 InnoDB
页大小,请查询 innodb_page_size
设置。
Press CTRL+C to copymysql> SELECT @@GLOBAL.innodb_page_size; +---------------------------+ | @@GLOBAL.innodb_page_size | +---------------------------+ | 16384 | +---------------------------+
当表空间的 AUTOEXTEND_SIZE
设置发生更改时,随后发生的第一个扩展将使表空间大小增加到 AUTOEXTEND_SIZE
设置的倍数。后续扩展为配置的大小。
当每个表一个文件表空间或通用表空间以非零 AUTOEXTEND_SIZE
设置创建时,表空间将在指定的 AUTOEXTEND_SIZE
大小处初始化。
ALTER TABLESPACE
不能用于配置每个表一个文件表空间的 AUTOEXTEND_SIZE
。必须使用 ALTER TABLE
。
对于在每个表一个文件表空间中创建的表,SHOW CREATE TABLE
仅在将 AUTOEXTEND_SIZE
选项配置为非零值时才显示该选项。
要确定任何 InnoDB
表空间的 AUTOEXTEND_SIZE
,请查询 Information Schema INNODB_TABLESPACES
表。例如:
Press CTRL+C to copymysql> SELECT NAME, AUTOEXTEND_SIZE FROM INFORMATION_SCHEMA.INNODB_TABLESPACES WHERE NAME LIKE 'test/t1'; +---------+-----------------+ | NAME | AUTOEXTEND_SIZE | +---------+-----------------+ | test/t1 | 4194304 | +---------+-----------------+ mysql> SELECT NAME, AUTOEXTEND_SIZE FROM INFORMATION_SCHEMA.INNODB_TABLESPACES WHERE NAME LIKE 'ts1'; +------+-----------------+ | NAME | AUTOEXTEND_SIZE | +------+-----------------+ | ts1 | 4194304 | +------+-----------------+
当 AUTOEXTEND_SIZE
设置为 0(默认设置)时,表示表空间将根据上面描述的默认表空间扩展行为进行扩展。