稼動中のサービスのDB操作。
これほど嫌なことは無い と思ってしまった。
スタートして1ヶ月ほどの auのとある公式サイトなのですが
FOMA版がそろそろスタートするので
統合したシステムにするために少しDBを変更する必要がありました。

カラム追加でalterしたり
テーブル追加でcreateしたり
データ追加でinsertしたり
データ変更でupdateしたり
etc…

もちろんテスト環境で何度も確認してるんだけど
万が一問題があった場合に dumpデータを復旧しなければならない。
胃が痛いのはその復旧時間。

テストサーバで試したら2時間以上かかる。
無停止で、せめて数分でという状況で2時間は痛すぎる。
ちなみにMySQLのInnoDBね
MyISAMならば、DB自体をリネームしちゃうって手もあるんだけど
そーもいかない。

社内の人たちにいろいろ聞き込み調査をしていたら、
これやってみれば?という助言をもらった。

SET AUTOCOMMIT=0;

>複数の変更処理を 1 つのトランザクションにまとめる。InnoDB は、データベースを変更するトランザクションがコミットされるたびにログをディスクにフラッシュする必要がある。一般にディスクの回転速度は最高でも 1 秒間に 167 回転(10000rpmの規格の物の場合)であるため、ディスクがオペレーティングシステムを欺かない限り、コミットの回数も同じく 1 秒間に 167 回に制限される。

だそうです。

こいつを無効にして、あとからcommitを自分でしてあげたら
なんとわずか6分で復旧テストが完了してしまった。
ちょっと拍子抜け(^^;

HDDへの書き込みがボトルネックになるというのは
あっちゃこっちゃで見るけれど、これほどとは。