在對MySQL數據庫進行創建索引等操作時報錯
更新時間:
問題描述
在DMS控制臺中對RDS MySQL實例或自建MySQL數據庫(ECS自建數據庫或IDC自建數據庫)進行創建索引等操作時,提示類似如下信息。
ERROR 1799 (HY000): Creating index 'XXX' required more than'innodb_online_alter_log_max_size' bytes of modification log. Please try XXX.XXX
問題原因
innodb_online_alter_log_max_size參數的值設置過小導致創建索引失敗,innodb_online_alter_log_max_size參數的相關信息請參見更多信息。
解決方案
- RDS MySQL實例
若您想修改該參數,請參見設置實例參數設置innodb_online_alter_log_max_size參數。 - 自建MySQL數據庫
登錄數據庫,參考以下語句,修改該參數的大小。SET GLOBAL innodb_online_alter_log_max_size=[$Size];
說明:[$Size]值的大小請您聯系對應業務DBA支持進行評估。
更多信息
innodb_online_alter_log_max_size參數是MySQL 5.6.6新加入的一個參數,用以指定對InnoDB表進行在線DDL操作時,所使用的臨時日志文件的最大大小(以字節為單位,默認128MB),在創建索引或者使用ALTER語句修改表時會使用該臨時文件。該文件記錄了DDL操作期間插入、更新、刪除的數據。在必要的時候該日志文件的大小會根據innodb_sort_buffer_size的值增加容量,直至達到innodb_online_alter_log_max_size值指定的最大值。若臨時表的大小超出此上限,則使用ALTER語句修改表的操作會失敗,即當前所有未提交的DML操作都會回滾。
因此,設置一個較大的值可以允許在線DDL操作期間有更多的DML操作被執行,但是過大的值會導致DDL操作后鎖定表的時間更長(鎖定表,應用日志記錄到表上)。即在任務執行過程中有過多的新增數據進來,導致臨時文件存放不下。innodb_online_alter_log_max_size參數的更多信息,請參見MySQL官方文檔。
適用于
- 數據管理DMS
- 云數據庫RDS
文檔內容是否對您有幫助?