1. 程式人生 > 其它 >mysql 優化表空間報錯Creating index 'PRIMARY' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try again

mysql 優化表空間報錯Creating index 'PRIMARY' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try again

背景:mysql資料庫中有幾個表的碎片率太高,浪費了儲存空間且降低了讀寫效率,需要整理。

mysql版本:5.6

 

 

 

 

 

先用optimize table 試試。

也執行了很久。但是結束後,data_free 沒有變化。

再用 alter table table_name force。

也等了很久,回來一看,居然報錯了:Creating index 'PRIMARY' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try again

 

搜尋引擎了一番,原來是有個引數小了。

說明:innodb_online_alter_log_max_size是MySQL 5.6.6新加入的一個動態全域性引數,用以指定對InnoDB表進行線上DDL操作時,所使用的臨時日誌檔案的最大大小(以位元組為單位,預設128M),在建立索引或者使用ALTER語句修改表時會使用該臨時檔案。該檔案記錄了DDL操作期間插入、更新、刪除的資料。在必要的時候該日誌檔案的大小會根據innodb_sort_buffer_size的值增加容量,直至達到innodb_online_alter_log_max_size值指定的最大值。若臨時表的大小超出此上限,則使用ALTER語句修改表的操作會失敗,即當前所有未提交的DML操作都會回滾。因此,設定一個較大的值可以允許線上DDL操作期間有更多的DML操作被執行,但是過大的值會導致DDL操作後鎖定表的時間更長(鎖定表,應用日誌記錄到表上)。即在任務執行過程中有過多的新增資料進來,導致臨時檔案存放不下。
————————————————
原文連結:https://blog.csdn.net/HYZX_9987/article/details/112010324

 

調整:

set  global innodb_online_alter_log_max_size=1073741824;

 

再用 alter table table_name force。成功。