Documentation Home
MySQL 8.0 参考手册  / 第 15 章 InnoDB 存储引擎  / 15.6 InnoDB 磁盘结构  / 15.6.3 表空间  /  15.6.3.9 表空间 AUTOEXTEND_SIZE 配置

15.6.3.9 表空间 AUTOEXTEND_SIZE 配置

默认情况下,当 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 TABLEALTER TABLE

CREATE TABLE t1 (c1 INT) AUTOEXTEND_SIZE = 4M;
ALTER TABLE t1 AUTOEXTEND_SIZE = 8M;

要为通用表空间配置扩展大小,请在or 语句 中指定AUTOEXTEND_SIZE大小 :CREATE TABLESPACEALTER 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 字节)。要确定InnoDBMySQL 实例的页面大小,请查询 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_SIZEfile-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,表示根据上述默认表空间扩展行为扩展表空间 。