Mysql

innodb ALTER TABLE 需要多少磁碟空間

  • December 4, 2020

我有一個大的 InnoDB 表,我想通過添加一個小列來改變它。我準備等待一段時間,但我想知道ALTER TABLE命令在執行時會消耗多少磁碟空間?我的磁碟上是否需要足夠的空間來儲存表格的兩個完整副本?

是的。您將需要足夠的空間來存放表格的兩個副本。MySQL 通過創建新表、從舊表複製數據、然後刪除舊表來執行表的更改。

我知道它很舊,但我相信接受的答案是不完整的。

MySQL 會在很多ALTER TABLE操作中創建表的臨時副本。但它會在一個臨時文件夾中創建該副本:

臨時排序文件的空間

重建表的線上 DDL 操作在索引創建期間將臨時排序文件寫入 MySQL 臨時目錄(Unix 上的 $TMPDIR、Windows 上的 %TEMP% 或 –tmpdir 指定的目錄)。臨時排序文件不會在包含原始表的目錄中創建。每個臨時排序文件都足夠大,可以容納一列數據,並且每個排序文件在其數據合併到最終表或索引中時都會被刪除。涉及臨時排序文件的操作可能需要等於表中的數據量加上索引的臨時空間。如果線上 DDL 操作使用了數據目錄所在文件系統上的所有可用磁碟空間,則會報告錯誤。

如果 MySQL 臨時目錄不足以容納排序文件,請將 tmpdir 設置為不同的目錄。或者,使用 innodb_tmpdir 為線上 DDL 操作定義一個單獨的臨時目錄。引入此選項是為了幫助避免由於大型臨時排序文件而可能發生的臨時目錄溢出。

引自MySQL 8.0 Reference Manual,但我相信這種行為很古老,將適用於迄今為止所有相關的 MySQL 版本(ATM 這是 5.6、5.7 和 8.0)

引用自:https://serverfault.com/questions/277696