お手軽InnoDBウォームアップを実現するMySQL::Warmerの話をGotanda.pm #2 でしてきました
Gotanda.pm #2 でMySQL::Warmerというモジュールの紹介をしたのですが、それをCPANizeしたのでエントリを書いています。
% cpanm MySQL::Warmer
とすると、mysql-warmup
というコマンドがインストールされ以下のようなコマンドを打つとウォームアップクエリがダラっと発行されます。--dry-run
もあり、その場合、発行されるクエリが標準出力されます。
% mysql-warmup mydatabase -h db.example.com -u dbuser -p
サービス投入前のDBのデータをメモリに乗っけてやるのに有用でしょう。
ウォームアップ戦略はkazuhoさんのMySQL のウォームアップ (InnoDB編)に基づいていますが一部適当です。突っ込みどころがあれば指摘いただければと思います。
ISUCONでも再起動かかった直後に動かすようにしておくなどすると役に立つでしょう。メモリにデータが乗り切る前提ですが。
ちなみに、MySQL5.6以降にはinnodb_buffer_pool_dump_at_shutdown
, innodb_buffer_pool_load_at_startup
というものがあり、単純にDBサーバーを再起動するだけであればこれで十分そうです。便利な世の中になってきたものです。