線上 DDL 操作的磁碟空間需求如下所列。這些需求不適用於立即執行的操作。
暫時日誌檔案
當線上 DDL 操作建立索引或變更資料表時,暫時日誌檔案會記錄並行的 DML。暫時日誌檔案會根據
innodb_sort_buffer_size
的值來擴充,最大值由innodb_online_alter_log_max_size
指定。如果操作耗時較長,且並行的 DML 修改資料表的次數太多,以至於暫時日誌檔案的大小超過innodb_online_alter_log_max_size
的值,線上 DDL 操作會失敗,並出現DB_ONLINE_LOG_TOO_BIG
錯誤,而且未提交的並行 DML 操作會被回滾。較大的innodb_online_alter_log_max_size
設定允許在線上 DDL 操作期間進行更多 DML,但也會延長在 DDL 操作結束時鎖定資料表以套用記錄的 DML 的時間。innodb_sort_buffer_size
變數也定義了暫時日誌檔案的讀取緩衝區和寫入緩衝區的大小。暫時排序檔案
線上 DDL 操作在重建資料表時,會將臨時排序檔案寫入 MySQL 的臨時目錄(Unix 上為
$TMPDIR
,Windows 上為%TEMP%
,或由--tmpdir
指定的目錄)以建立索引。臨時排序檔案不會建立在原始資料表所在的目錄中。每個臨時排序檔案都足以容納一欄資料,並且當其資料合併到最終資料表或索引時,每個排序檔案都會被移除。涉及臨時排序檔案的操作可能需要等於資料表加上索引的資料量的臨時空間。如果線上 DDL 操作使用了資料目錄所在檔案系統上的所有可用磁碟空間,則會報告錯誤。如果 MySQL 的臨時目錄不足以容納排序檔案,請將
tmpdir
設定為不同的目錄。或者,使用innodb_tmpdir
為線上 DDL 操作定義單獨的臨時目錄。引入此選項是為了幫助避免由於大型臨時排序檔案而可能發生的臨時目錄溢位。中介資料表檔案
一些重建資料表的線上 DDL 操作會在與原始資料表相同的目錄中建立臨時中介資料表檔案。中介資料表檔案可能需要等於原始資料表大小的空間。中介資料表檔案名稱以
#sql-ib
為首碼,並且僅在線上 DDL 操作期間短暫出現。innodb_tmpdir
選項不適用於中介資料表檔案。