2013年2月8日金曜日

MySQL 5.6のオンラインALTER TABLEを試してたらinnodb_online_alter_log_max_sizeに遭遇した

本当はpt-online-schema-changeとオンラインALTER TABLEでどう違うかを実験したかったんだけど、
innodb_online_alter_log_max_sizeなんてものの存在を初めて知ったので取り敢えずメモ。

tpcc-mysqlを20WH, 20Connsで流しながらALTER TABLEをする at 5.6.10。


mysql> set foreign_key_checks = 0; ALTER TABLE stock ADD test_col int unsigned not null default 0, ADD KEY (s_ytd);
Query OK, 0 rows affected (0.08 sec)

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

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.11 sec)


…へぇ。デフォルト128MiB。
対象テーブルはデータとインデックス合わせて800MiBくらい。

SELECT .. FOR UPDATEでロックしてからUPDATEがかかるトランザクションがごりごりかかるテーブル。


ALTER TABLE中に入ってきた更新を溜めておくテンポラリファイルっぽい。
更新量が多いとこれが溢れるのか。。
大きめに変えておいた方が良いかも。

誰か調べたら教えて下さい。

0 件のコメント :

コメントを投稿