DDL失敗案例

問題描述mysql

今天對線上某個業務的大表120G進行重建表操做時遇到報錯,該表有個比較顯著的特徵是*寫入量比較大,天天寫入加更新的頻率在數千萬級別。大體的環境sql

1 版本:Percona 5.6.24 ui

2 操做:經過alter table xx engine=innodb 重建表 spa

現象以下:日誌

db [RO] 09:55:50 >alter table xx engine=innodb;
ERROR 1799 (HY000): Creating index 'PRIMARY' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try again.
db [RO] 10:58:38 >show variables like 'innodb_online_alter_log_max_size';
+----------------------------------+-----------+
| Variable_name                    | Value     |
+----------------------------------+-----------+
| innodb_online_alter_log_max_size | 134217728 |
+----------------------------------+-----------+
1 row in set (0.00 sec)

經過官方文檔介紹innodb_online_alter_log_max_size 是MySQL 5.6版本引入。code

該參數限定了online ddl操做時使用的臨時日誌文件的最大大小(以字節爲單位,默認爲128M)。在建立索引或者對錶進行alter操做時,該日誌文件存儲了DDL操做期間對錶的 insert,update,delete的數據記錄。臨時日誌文件每次以innodb_sort_buffer_size爲單位進行擴展直至達到 innodb_online_alter_log_max_size設置的最大值。若是臨時日誌的大小超出規定限,則online ddl操做失敗,當前全部未提交的DML操做會回滾。該參數設置日誌文件太大帶來的負面影響是可能會致使DDL操做最後鎖定表(Waiting for table metadata lock)的時間更長,由於要花費更長的時間應用日誌到表上。blog

解決方法:調整該參數的大小索引

mysql> set global innodb_online_alter_log_max_size=268435456; 文檔

 online ddl操做完成以後 能夠再將值修改成原來的值。it

相關文章
相關標籤/搜索