以下概述線上 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
選項不適用於中繼表格檔案。