默认情况下,当独立表空间或通用表空间需要额外空间时,表空间会根据以下规则增量扩展:
1、如果表空间的大小小于1 个扩展区,则一次扩展一页。
2、如果表空间的大小大于1个扩展区但小于32个扩展区,则一次扩展一个扩展区。
3、如果表空间的大小超过32个扩展区,则一次扩展四个扩展区。
从 MySQL 8.0.23 开始,独立表空间或通用表空间的扩展量可通过指定 AUTOEXTEND_SIZE选项进行配置。配置更大的扩展大小可以帮助避免碎片并促进大量数据的摄取。
要配置独立表空间的扩展大小,请在CREATE TABLE或ALTER TABLE语句中指定AUTOEXTEND_SIZE大小 :
CREATE TABLE t1 (c1 INT) AUTOEXTEND_SIZE = 4M;
ALTER TABLE t1 AUTOEXTEND_SIZE = 8M;
要配置通用表空间的扩展大小,请在CREATE TABLESPACE或ALTER TABLESPACE语句 中指定AUTOEXTEND_SIZE大小 :
CREATE TABLESPACE ts1 AUTOEXTEND_SIZE = 4M;
ALTER TABLESPACE ts1 AUTOEXTEND_SIZE = 8M;
AUTOEXTEND_SIZE设置必须是 4M 的倍数。指定AUTOEXTEND_SIZE不是 4M 倍数的设置会返回错误。
AUTOEXTEND_SIZE默认设置为 0,这会导致系统根据默认行为扩展表空间。
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 字节)。要确定您的 MySQL 实例的InnoDB页面大小,请查询 innodb_page_size设置:
mysql> SELECT @@GLOBAL.innodb_page_size;
+---------------------------+
| @@GLOBAL.innodb_page_size |
+---------------------------+
| 16384 |
+---------------------------+
当更改表空间的AUTOEXTEND_SIZE设置时,随后发生的第一个扩展会将表空间大小对其到 AUTOEXTEND_SIZE设置的倍数。后续扩展对应配置的大小。
当使用非零AUTOEXTEND_SIZE设置创建独立表空间或通用表空间时,表空间将初始化为指定 AUTOEXTEND_SIZE大小。
ALTER TABLESPACE不能用于配置独立表空间的AUTOEXTEND_SIZE。必须使用ALTER TABLE。
对于在独立表空间中创建的表, 仅当它的AUTOEXTEND_SIZE配置为非零值时才能使用 SHOW CREATE TABLE显示该选项。
要确定任何 InnoDB表空间的AUTOEXTEND_SIZE配置,请查询 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 |
+------+-----------------+
| 留言与评论(共有 0 条评论) “” |