/dev/shm に参照系DBを持っていくと I/O 負荷が激減した件(当たり前だけど)
前エントリーから一部の内容を分離して追加記事にしてみました。以下実施したメモリ増設の効果について。
ここ数ヶ月、自宅サーバの負荷がだんだんと上昇してきていて、そろそろ1台で高速にさばききる限界に近づいてきた感があったり。ここ数週間のロードアベレージはこんな感じ。グラフは× 100 の値になってます。CPU のコアが2個なんで、200 までは OK ということでまだ処理しきれているわけではあります。ちなみに mrtg グラフは瞬間値を示しているわけではなく平均値なので瞬間的にはもっと負荷が高いときとかあります。
でも月次処理が走るともっさり感満点。
※緑:1分平均 / 青:15分平均
実は CPU の処理速度が追いついていないと言うより I/O 周りがボトルネックになっています。
※緑:読取ブロック数 / 青:書込ブロック数
ということで、メモリを2GBプラスして、合計 4GB にして参照系のデータ周りを /dev/shm に移動したらこうなりました。予想通り、ロードアベレージは半減してイイ感じに!
disk I/O のグラフも思惑通りに読込 I/O が激減してこれまたイイ感じに!
※グラフ右端の土曜日のところからです。
※緑:1分平均 / 青:15分平均
※緑:読取ブロック数 / 青:書込ブロック数
とまぁ当然の結果ではありますが参照系 DB をメモリ上(ここでは /dev/shm を利用してます)へ持って行くと、I/O が改善されてかなりの負荷低減を実現することができます。以前、qmail の配信能力を極限まで引き出す方法(ログ関連)って記事を書いたときは、書込 I/O 改善で /dev/shm を使う例を書きました。
何だかんだ言って disk はメモリに比べて数百倍以上遅い媒体なので、消えても問題がないもしくは即座に同じデータが生成(復旧)できるようなデータは /dev/shm を使うとかなりイイ感じ。
__追記__
ちなみに、今回実施した参照系DBとは mysql じゃなくって独自のインデックスデータだったりするので mysql とかだと別解とかあると思います。
コメントやシェアをお願いします!
えせSE
drkさん、返答ありがとうございます m(_ _)m
> Oracleのチューニングについてはまた別の機会にでも書いてみます。
楽しみにしております。こちらのコンテンツは興味深い物が多い(とても仕事で使えそうな・・・)ので、会社からもお邪魔させていただいています。
> 今回のケースではDBMS_SHARED_POOL.KEEPを使ってメモリに貼り付けると良いのでは?
DBMS_SHARED_POOL.KEEPなるものを調べてみました。なるほど・・・オブジェクト単位で共有プールに置きっぱなしになるんですね。
これはアプリ製造担当と話してみます。・・・出来れば、SQLと処理ロジックを見直してくれと言いたいですが (ぉ
> Vistaですが、リソースモニタでどのファイルがI/Oが高いかを見ることができます。
言葉足らずで申し訳ありません。
Vistaなら見れそうだという事は調べがついていたのですが、
XPや2003で見ることは出来ないでしょうか?が正しい質問内容になります。
※会社で使用しているPCにはメモリが2GB乗っているので、重い仕事をしない時とかにも有効活用してみたいなぁと思った次第です。
Windowsにも、Linuxみたいな論理ボリュームがあればそれをTEMPに割り当てるのですが・・・%TEMP%=(RAM+HDD)←こんなので
ちょっと分からなかったので、せめてI/Oの激しいファイルでも置こうかと考えたという経緯があります。
上司には、(RAMディスクは)昔ならともかく今はそんなに必要ないんじゃないか?とか言われちゃいました。しょんぼり。
drk
えせSE さん>自分もOracle使いでガンガンにチューニングしてきた経験はあります。僕ならこのケースの場合はRAMは使いません。完全にOracleのチューニングに没頭してパフォーマンスを上げる策をとると思います。8i時代はかなりガンガンやってたけど10gになってからチューニングは全然しなくなったのでかなり知識を忘れていますが・・・(汗
Oracleのチューニングについてはまた別の機会にでも書いてみます。今回のケースではDBMS_SHARED_POOL.KEEPを使ってメモリに貼り付けると良いのでは?
Vistaですが、リソースモニタでどのファイルがI/Oが高いかを見ることができます。タスクマネージャからリソースモニタのボタンがあると思いますので、そこで見てみては如何でしょうか?
えせSE
RAMディスクを上手く使う方法を探しててたどり着きました。
よろしくお願いします。
/dev/shm に参照系DBを配置するという発想が全然無かったので、とても興味深く読ませていただきました。
読んでいて、こーゆー場合はどうするんだろうといくつか疑問が沸いたので、もしよろしければ勉強させてください。
・参照系DB(データファイル)の容量がRAMディスクの容量を超えていた場合、
drk7さんならどのようにRAMディスクを活用されるのでしょうか?
※えせOracle使いとしては、参照系DBの中でも、特に参照されるデータを別データファイルに移す・・・くらいしか思い浮かびませんでした _| ̄|○
・(Windows系OSの話ですが・・・)I/Oが頻繁に発生するファイルを探す方法など、ご存じないでしょうか?
Vistaにそれらしい機能があるようなのですが・・・。
急にこのような質問をしてしまい、申し訳ありません。
ではでは、失礼します。