コメントするTweet今回は、MySQLのREDOログを使い切ってしまった場合にどんな悲劇が訪れるか、というのをグラフで見てみようと思います。今回テストした環境はこんな感じです。/usr/share/sysbench/oltp_write_only.lua他のサーバからsysbenchで書き込み負荷をかけてみて、MySQLのTPSがどうなるか、というのを見てみようというわけです。結果はこんな感じでした。テスト開始15秒ほどから180秒間sysbenchの負荷をかけています。atで、どのくらいまだデータファイルに適用していないREDOログがあるかわかります。新規書き込み要求よりもREDOログのフラッシュを優先するようになりますが、この結果はそれを裏付けているといえます。200MB)、TPSが急落していますので、これがアプリケーションのある通常のシステムであれば、ユーザーからみて処理が重たくなっているであろうことが推察されます。REDO使用率70%ほどになってからしばらくはREDOログのフラッシュがかなり優先され、その結果REDOログ使用率は50%くらいまで持ち直しています。残りのREDOログをフラッシュする、という挙動を見せています。新規REDOログへの書き込み量が釣り合っているということなので、それではREDOログがパフォーマンス上の緩衝材の役割を果たせていない、ということを意味していると考えています。当然ながらディスクのビジー率は90%以上で、かなりの高負荷です。これはREDO使用率が70%に達し、REDOログのフラッシュが優先されるようになってからも同様です。暇さえあれば全力でフラッシュをする仕様というわけではないと推定されます。これらの結果を見てわかる通り、REDOログの枯渇はパフォーマンスに深刻な(TPSベースで言って1/5程度)悪影響を与えます。これを避けるためには、1にも2にも、innodb_log_file_sizeを上げることです。少なくとも、上のグラフでみたような事態になっているようであれば、どう考えてもib_logfileを拡張すべきと言えるでしょう。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。Ushio駆け出しのMySQLエンジニア。OSSを仕事で扱っています。themehall.com。