默认情况下,当 file-per-table 或 general 表空间需要额外空间时,表空间会根据以下规则递增扩展:
如果表空间的大小小于扩展区,则一次扩展一页。
如果表空间的大小大于 1 个扩展区但小于 32 个扩展区,则一次扩展一个扩展区。
如果表空间的大小超过 32 个区,则一次扩展四个区。
有关扩展区大小的信息,请参阅 第 15.11.2 节,“文件空间管理”。
从 MySQL 8.0.23 开始,file-per-table 或 general tablespace 扩展的数量可以通过指定
AUTOEXTEND_SIZE
选项来配置。配置更大的扩展大小有助于避免碎片并促进大量数据的摄取。
要为 file-per-table 表空间配置扩展大小,请在or
语句
中指定AUTOEXTEND_SIZE
大小
:CREATE TABLE
ALTER TABLE
CREATE TABLE t1 (c1 INT) AUTOEXTEND_SIZE = 4M;
ALTER TABLE t1 AUTOEXTEND_SIZE = 8M;
要为通用表空间配置扩展大小,请在or
语句
中指定AUTOEXTEND_SIZE
大小
:CREATE TABLESPACE
ALTER TABLESPACE
CREATE TABLESPACE ts1 AUTOEXTEND_SIZE = 4M;
ALTER TABLESPACE ts1 AUTOEXTEND_SIZE = 8M;
AUTOEXTEND_SIZE
创建撤消表空间时也可以使用
该选项,但撤消表空间的扩展行为不同。有关详细信息,请参阅
第 15.6.3.4 节,“撤消表空间”。
该AUTOEXTEND_SIZE
设置必须是 4M 的倍数。指定AUTOEXTEND_SIZE
不是 4M 倍数的设置会返回错误。
默认设置为 0,这AUTOEXTEND_SIZE
会导致表空间根据上述默认行为进行扩展。
在 MySQL 8.0.23 中最大AUTOEXTEND_SIZE
设置为 64M。从 MySQL 8.0.24 开始,最大设置为 4GB。
最小AUTOEXTEND_SIZE
设置取决于InnoDB
页面大小,如下表所示:
InnoDB 页面大小 | 最小 AUTOEXTEND_SIZE |
---|---|
4K |
4M |
8K |
4M |
16K |
4M |
32K |
8M |
64K |
16M |
默认InnoDB
页面大小为 16K(16384 字节)。要确定InnoDB
MySQL 实例的页面大小,请查询
innodb_page_size
设置:
mysql> SELECT @@GLOBAL.innodb_page_size;
+---------------------------+
| @@GLOBAL.innodb_page_size |
+---------------------------+
| 16384 |
+---------------------------+
更改表空间的AUTOEXTEND_SIZE
设置时,随后发生的第一个扩展会将表空间大小增加到该
AUTOEXTEND_SIZE
设置的倍数。后续扩展具有配置的大小。
当使用非零AUTOEXTEND_SIZE
设置创建 file-per-table 或 general 表空间时,表空间将初始化为指定的
AUTOEXTEND_SIZE
大小。
ALTER TABLESPACE
不能用于配置AUTOEXTEND_SIZE
file-per-table 表空间。ALTER
TABLE
必须使用。
对于在 file-per-table 表空间中创建的表,
仅当将其配置为非零值时才
SHOW CREATE TABLE
显示该
选项。AUTOEXTEND_SIZE
要确定AUTOEXTEND_SIZE
任何
InnoDB
表空间的,请查询
INFORMATION_SCHEMA.INNODB_TABLESPACES
表。例如:
mysql> 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,表示根据上述默认表空间扩展行为扩展表空间
。