デフォルトでは、file-per-table または general テーブルスペースに追加の領域が必要な場合、テーブルスペースは次の規則に従って増分的に拡張されます:
テーブルスペースのサイズがエクステントより小さい場合は、一度に 1 ページずつ拡張されます。
テーブルスペースが 1 エクステントより大きいが、サイズが 32 エクステントより小さい場合は、一度に 1 エクステントずつ拡張されます。
テーブルスペースのサイズが 32 エクステントを超える場合は、一度に 4 エクステント拡張されます。
エクステントサイズの詳細は、セクション15.11.2「ファイル領域管理」 を参照してください。
MySQL 8.0.23 では、file-per-table または general テーブルスペースを拡張する量は、AUTOEXTEND_SIZE
オプションを指定することで構成できます。 拡張サイズを大きく構成すると、断片化を回避し、大量のデータの収集を容易にすることができます。
file-per-table テーブルスペースの拡張子サイズを構成するには、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
オプションは、UNDO テーブルスペースの作成時にも使用できますが、UNDO テーブルスペースの拡張動作は異なります。 詳細は、セクション15.6.3.4「undo テーブルスペース」を参照してください。
AUTOEXTEND_SIZE
設定は 4M の倍数である必要があります。 4M の倍数ではない AUTOEXTEND_SIZE
設定を指定すると、エラーが返されます。
AUTOEXTEND_SIZE
のデフォルト設定は 0 で、テーブルスペースは前述のデフォルトの動作に従って拡張されます。
AUTOEXTEND_SIZE
の最大設定は 64M です。
次のテーブルに示すように、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
設定で file-per-table または general テーブルスペースが作成されると、テーブルスペースは指定された AUTOEXTEND_SIZE
サイズで初期化されます。
ALTER TABLESPACE
を使用して file-per-table テーブルスペースの AUTOEXTEND_SIZE
を構成することはできません。 ALTER TABLE
を使用する必要があります。
file-per-table テーブルスペースに作成されたテーブルの場合、SHOW CREATE TABLE
で AUTOEXTEND_SIZE
オプションが表示されるのは、ゼロ以外の値に構成されている場合のみです。
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 |
+------+-----------------+
AUTOEXTEND_SIZE
のデフォルト設定である 0 は、テーブルスペースが前述のデフォルトのテーブルスペース拡張動作に従って拡張されることを意味します。