預設情況下,當每個表格的表空間或通用表空間需要額外空間時,表空間會依照以下規則逐步擴展
如果表空間的大小小於一個 extent,則會一次擴展一個頁面。
如果表空間的大小大於 1 個 extent 但小於 32 個 extent,則會一次擴展一個 extent。
如果表空間的大小大於 32 個 extent,則會一次擴展 4 個 extent。
有關 extent 大小的資訊,請參閱第 17.11.2 節「檔案空間管理」。
每個表格的表空間或通用表空間的擴展量可透過指定 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
選項也可以在建立復原表空間時使用,但復原表空間的擴展行為有所不同。如需更多資訊,請參閱第 17.6.3.4 節「復原表空間」。
AUTOEXTEND_SIZE
設定必須是 4M 的倍數。指定不是 4M 倍數的 AUTOEXTEND_SIZE
設定會傳回錯誤。
AUTOEXTEND_SIZE
預設設定為 0,這會導致表空間依照上述預設行為進行擴展。
允許的最大 AUTOEXTEND_SIZE
為 4GB。最大表空間大小請參考第 17.21 節,「InnoDB 限制」。
最小的 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
。
對於在每個表格一個檔案的表空間中建立的表格,SHOW CREATE TABLE
僅在 AUTOEXTEND_SIZE
選項設定為非零值時才會顯示。
要確定任何 InnoDB
表空間的 AUTOEXTEND_SIZE
,請查詢資訊綱要 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 (預設設定) 表示表空間會根據上述預設表空間擴展行為進行擴展。