MySQLのクエリーチューニング

晴れ仕事で使っているMySQLで大量のinsertを処理することになった。 1日120万件くらい。 それを48時間保存し、使い終わったものはdeleteする。
そのMySQLサーバーはレプリケーションを組んでおり、スレーブ2台にバイナリログでデータが配送される。
で、大量のinsert。 全てスレーブにも反映される。 そこまではいいのだけど、バイナリログとディスクに書かれる量がとても多く、HDDのIO待ちが発生している模様。

で、部内で話し合い、一時データとして、ストレージエンジンをmemoryにしたものに書き込み。 それを8秒に1000件ずつ、複数insertの構文で、innodbのテーブルに挿入。 insertしたデータはmemoryのテーブルからは消す。
という処理を加えた。
バイナリログに書かれるもの自体は倍になった感じだけど、insert待ちがだいぶ減った気がする。

普段MyIsamばかりで、innodbはほとんど使ったことがないので、insert、updateなどが遅い以外にも、まだいろいろと悩まされるかもしれないな。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です