innodb_online_alter_log_max_size関係のエラーでALTER TABLEが止まった

mysql

■mysql5.6でオンラインDDLを流していたら途中で止まってしまった

でかいテーブルに対してALTER TABLEを実行していたのですが、いきなり以下のようなエラーが出てALTERが止まってしまいました。

ERROR 1799 (HY000): 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> 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)

 

どうやらデフォルトで128MB。なにかがコレの値をオーバーしてしまったようです。

 

■そもそもこのエラーはなんだ

確認してみると、オンラインDDLを実行中に発生した変更を持っておくバッファのようです。ということは、オンラインDDLでALTERしている時に変更されるデータが多ければ多いほどこのバッファを利用するということですね。確かに対象のテーブルは結構ガリガリとデータを更新するようなテーブルでした。

 

どうもオンラインでこのinnodb_online_alter_log_max_sizeは変更できないようですね。my.cnfを書き換えて決死のDB再起動で対応しました。おぉ。。こわい。