文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  表空間 AUTOEXTEND_SIZE 設定

17.6.3.9 表空間 AUTOEXTEND_SIZE 設定

預設情況下,當每個表格的檔案或一般表空間需要額外空間時,表空間會根據以下規則遞增擴展:

  • 如果表空間的大小小於一個區塊,則每次擴展一頁。

  • 如果表空間的大小大於 1 個區塊但小於 32 個區塊,則每次擴展一個區塊。

  • 如果表空間的大小大於 32 個區塊,則每次擴展四個區塊。

有關區塊大小的資訊,請參閱第 17.11.2 節,「檔案空間管理」

每個表格的檔案或一般表空間的擴展量可以透過指定 AUTOEXTEND_SIZE 選項來設定。設定較大的擴展大小有助於避免碎片,並促進大量資料的擷取。

若要設定每個表格的檔案表空間的擴展大小,請在 CREATE TABLEALTER TABLE 語句中指定 AUTOEXTEND_SIZE 大小。

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

ALTER TABLE t1 AUTOEXTEND_SIZE = 8M;

若要設定一般表空間的擴展大小,請在 CREATE TABLESPACEALTER 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 (預設設定) 表示表空間會根據上述的預設表空間擴展行為進行擴展。