Mysql

innodb_online_alter_log_max_size 是否從 ram 或硬碟中獲取記憶體

  • August 30, 2017

在更改大表 (400 G) 以添加索引時出現 Mysql (5.7) 錯誤:

ERROR 1799 (HY000): Creating index 'FTS_DOC_ID_INDEX' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try again.

我想我必須增加innodb_online_alter_log_max_size,但我擔心它從 RAM 中取出它時已經足夠滿了。

tmpdir注意:我在路徑上有足夠的空間。

當我閱讀手冊時:

指定在 InnoDB 表的線上 DDL 操作期間使用的臨時日誌文件大小的上限。每個正在創建的索引或正在更改的表都有一個這樣的日誌文件。此日誌文件儲存在 DDL 操作期間在表中插入、更新或刪除的數據。臨時日誌文件在需要時根據 innodb_sort_buffer_size 的值進行擴展,直到 innodb_online_alter_log_max_size 指定的最大值。如果臨時日誌文件超過大小上限,則 ALTER TABLE 操作將失敗,並且所有未送出的並發 DML 操作都將回滾。因此,此選項的較大值允許線上 DDL 操作期間發生更多 DML,但也會延長 DDL 操作結束時表被鎖定以應用日誌數據的時間段。

那是指磁碟空間,而不是 RAM。它會根據需要增長,而不是從設置開始。 innodb_online_alter_log_max_size可能應該設置為小於可用磁碟空間的值,否則不會太小。

innodb_sort_buffer_size預設為 1MB;可能沒有理由改變這一點。在某些操作中,會在 RAM 中分配這麼多空間。可能其中一個將為表上的每個索引分配(在 RAM 中)。

引用自:https://dba.stackexchange.com/questions/184731