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 件のコメント :
コメントを投稿