触診してみると、謎の10秒間隔でiowaitが5~10%に上がることを確認5分平均のiowaitグラフを見ても、ピーク時は50~60%であることを確認。以上のことから、アプリケーションからのクエリやデータ性質の問題ではなく、ほぼMySQLサーバの書き込みフラッシュのタイミングの問題であると断定しました。I/Oの書き込み先となっているファイルが何かを調べることにしました。SH2さん様々やでホンマに。SLAVEが止まったり再起動もしませんでした。シンボリックリンクを直接見て判断しましたところ、SLAVEが平時に書き込んでいたファイルがコレらで、socket:[1268430]/fio/mysql/ib_logfile1/fio/mysql/master.info/fio/mysql_log/relay/info/fio/mysql_log/relay/relay.003784/fio/mysql_log/bin/bin.00125910秒に1回、大量に書き込まれたのがコレと特定できました。1MB)で、その時は1つのタイミングで80回ほど連続して書き込まれていました。いう感じだったので、約0.5秒で書き込み終わっていたというわけです。書き込んでいる犯人を探すことになりました。(訂正前)ただ、mysqldプロセスが書き込むファイルを全て出しているのに、アプリ用DBのテーブルファイルが出現しなかった理由は不明なままです。書いているように見えて・・・各テーブルファイルにどうやって書き込んでいるのか・・・(訂正後)sh2先生の2つ目の記事を見ていなかったために、テーブルファイルが表示されなかったようです。肥大する理由を調べてみました。時にibdata1に書き込む内容はこんな感じ。ibdata1ここでは把握まで。新し目のPerconaだと、pagesに加えてbytesも取得できます。1ブロック16KBなので無くても算出できますけど。変わり、10秒間に1度リセットされていました。状態って感じみたいですね。10秒間隔なのかを追っていきます。データファイルへ書き出されるタイミングここから3つ拝借。次にここから1秒・10秒間隔の処理を拝借。disk色々あるものの、我々はHDDの時代からこれをPerconaで愛用してきました。keep_average本来、1秒毎にフラッシュするところを、0.1秒間隔にしてくれる正義の味方でした。これが効いていないことになる。しても、変わらないどころか酷くなる傾向にある。これが今回の最大の悲しい発見でした。keep_averageさんはどうしちゃったのか。10秒毎の強制タスクに助けられていたという現実に、ioDriveはエンジニアの眼を曇らせることを再認識。10秒間隔のフラッシュになってしまっていたことに、長い間、気づけていなかった。サービスが一定以上活気づいてようやく気づく無力感!!対応策その1ウチの冗長構成では、MASTERに障害が起きたらSLAVEが昇格して、二度と元MASTERにフェイルバックしないので、InnoDBのDoubleWriteは不要でした。OFFにしてみたところ、当然のように書き込み容量が半分になりました。いえば、もう1つのSLAVEと比べると良くなったり、むしろ倍悪くなったり。数や、10秒間隔には関係ないので、ioDriveに優しく寿命が倍になるだけ。innodb_checkpoint_age_target(そろそろフィーリングエンジニアとか呼ばれてもおかしくない)。最大値を制限することができます。して表示され、デフォ値はだいぶ大きくなっています。0.1秒に1回となるわけです。実際、これは期待通りに短期の間隔でフラッシュしてくれるようになり、負荷が均一化されました。これによる問題点が2つあります。1つ目は、keep_averageの強制0.1秒と異なり、トラフィック量によってその間隔が変化してしまうということ。アプリの性質や、その時々に応じて、ピーク時のcheckpointから設定値を調整しなくてはいけません。SETできる分マシですが、自動化するのもアレな所ですし・・・2つ目は、フラッシュ間隔が短いほど、書き込む総容量が増えてしまうということです。遊んでみたら、かなりの書き込み容量になってしまいました。これはおそらくですが、まとめて書き込むほどに、同じ行へのUPDATEがまとまるからです。極端に言えば、ある特定の1行へのUPDATEが10回あったとして、10秒間隔なら最終結果1回のDisk反映で済んでも、0.1秒間隔ならバラバラで10回の反映になる、といった感じでしょう、多分。(真のDBAじゃないので適当でスイマセン...)まとめうーん、どっかまだ間違った知識がありそうだけど......今回得た知識をまとめます。確実にトランザクションログのフラッシュ間隔を調整できる。checkpoint周りに手が入っていて、本家もPerconaも設定項目が変わっているので、あまり深追いしたくない感じ。理想では、溜まりすぎてもDiskI/O負荷が上がるし、細かすぎても書き込み量が増えるしなので、一定秒数や一定ログ量条件ではなく、アプリケーションごとに最適なバランスでフラッシュしてくれるといいのですが、5.6以降でよしなに改良されてないですかね......はぁ・・・それにしてもioDriveの導入で、アプリケーションのクエリの質がたるむのは予想内だったけど、まさかサーバ側の異変にも気付けていなかったのが軽くショックじゃて。わたしには功夫が足りないわ。15:26SH2先生のリンクその2を追記しました。コメントをキャンセルメールアドレスが公開されることはありません。data-url="">外道父ドリコムで主にインフラエンジニアをやっている何でも屋。WordPress.。