預設情況下,當每個表格的檔案或一般表空間需要額外空間時,表空間會根據以下規則遞增擴展:
如果表空間的大小小於一個區塊,則每次擴展一頁。
如果表空間的大小大於 1 個區塊但小於 32 個區塊,則每次擴展一個區塊。
如果表空間的大小大於 32 個區塊,則每次擴展四個區塊。
有關區塊大小的資訊,請參閱第 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
,請查詢 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 (預設設定) 表示表空間會根據上述的預設表空間擴展行為進行擴展。