#### 15.6.3.9 表空间自动扩展\_尺寸配置

默认情况下，当 file-per-table 或通用表空间需要额外空间时，表空间会根据以下规则增量扩展：

-   如果表空间的大小小于一个范围，则一次扩展一页。

-   如果表空间的大小大于 1 个扩展区但小于 32 个扩展区，则一次扩展一个扩展区。

-   如果表空间的大小超过 32 个扩展区，则一次扩展四个扩展区。

    有关范围大小的信息，请参阅[第 15.11.2 节，“文件空间管理”](innodb-file-space.html).

    从 MySQL 8.0.23 开始，file-per-table 或通用表空间的扩展量可以通过指定`AUTOEXTEND_SIZE`选项。配置更大的扩展大小可以帮助避免碎片并促进大量数据的摄取。

    要配置文件每表表空间的扩展大小，请指定`AUTOEXTEND_SIZE`大小[`创建表`](create-table.html)要么[`更改表`](alter-table.html)陈述：


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

```
ALTER TABLE t1 AUTOEXTEND_SIZE = 8M;
```

要配置通用表空间的扩展大小，请指定`AUTOEXTEND_SIZE`大小[`创建表空间`](create-tablespace.html)要么[`改变表空间`](alter-tablespace.html)陈述：

```
CREATE TABLESPACE ts1 AUTOEXTEND_SIZE = 4M;
```

```
ALTER TABLESPACE ts1 AUTOEXTEND_SIZE = 8M;
```

笔记

这`AUTOEXTEND_SIZE`创建撤消表空间时也可以使用选项，但撤消表空间的扩展行为不同。有关详细信息，请参阅[第 15.6.3.4 节，“撤消表空间”](innodb-undo-tablespaces.html).

这`AUTOEXTEND_SIZE`设置必须是 4M 的倍数。指定一个`AUTOEXTEND_SIZE`设置不是 4M 的倍数会返回错误。

这`AUTOEXTEND_SIZE`默认设置为 0，这会导致根据上述默认行为扩展表空间。

最大值`AUTOEXTEND_SIZE`MySQL 8.0.23 中设置为 64M。从 MySQL 8.0.24 开始，最大设置为 4GB。

最小值`AUTOEXTEND_SIZE`设置取决于`InnoDB`页面大小，如下表所示：

| InnoDB 页面大小 | 最小自动扩展\_尺寸 |
| ----------- | ---------- |
| `4K` | `4M` |
| `8K` | `4M` |
| `16K` | `4M` |
| `32K` | `8M` |
| `64K` | `16M` |

默认`InnoDB`页面大小为 16K（16384 字节）。确定`InnoDB`您的 MySQL 实例的页面大小，请查询[`innodb_page_size`](innodb-parameters.html#sysvar_innodb_page_size)环境：

```
mysql> SELECT @@GLOBAL.innodb_page_size;
+---------------------------+
| @@GLOBAL.innodb_page_size |
+---------------------------+
|                     16384 |
+---------------------------+
```

当。。。的时候`AUTOEXTEND_SIZE`更改表空间的设置，之后发生的第一个扩展将表空间大小增加到`AUTOEXTEND_SIZE`环境。后续扩展具有配置的大小。

当使用非零值创建每个表的文件或通用表空间时`AUTOEXTEND_SIZE`设置，表空间在指定的初始化`AUTOEXTEND_SIZE`尺寸。

[`改变表空间`](alter-tablespace.html)不能用于配置`AUTOEXTEND_SIZE`每个表的文件表空间。[`更改表`](alter-table.html)必须使用。

对于在 file-per-table 表空间中创建的表，[`显示创建表`](show-create-table.html)显示`AUTOEXTEND_SIZE`仅当它配置为非零值时才使用该选项。

确定`AUTOEXTEND_SIZE`对于任何`InnoDB`表空间，查询[`INFORMATION_SCHEMA.INNODB_TABLESPACES`](information-schema-innodb-tablespaces-table.html)桌子。例如：

```
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，表示根据上述默认表空间扩展行为扩展表空间。
