Home > pgsql > pgbenchとカーネルキャッシュ

pgbenchとカーネルキャッシュ

ファイルシステムやマウントオプションがどれくらいpgbenchの結果に影響をあたえるかを調べたかったんだけど、pgbenchした後に$PGDATAをumount -> mountしてまたpgbenchをするとガクンと結果が悪くなる(tpsが半分以下になる)。

どうやら、umountしたときにカーネルのキャッシュから消えてしまうかららしい。 mountしなおした後に数回pgbenchを実行しても速くならないが、pgbench -iしなおすとグっとパフォーマンスが良くなる。

さらに、この様子をvmstat 10とかしながあ見ていると、pgbench -iした直後にpgbenchすると、全くbi(Block In)が発生していないのがわかる。で、umountするとCashが減ってFreeが増える。mountしてpgbenchするとbiがガシガシ発生する(CashとFreeはほとんど変わらない)。

なんとか無理矢理カーネルキャッシュに載せてやることは出来ないのかと思い、cat /usr/local/pgsql/data/base/xxxx/* > /dev/null みたいなことをやってみると、確かにCashは増えてFreeは減る。pgbenchするとそこそこ結果も良かった。

ふーむ。こんなにキャッシュがベンチマークの結果に影響を与えるなら、うまいことキャッシュを操作する方法が欲しいな。

さてベンチマークの結果だけど、ファイルシステム(ext2かext3か)とwal_sync_methodについて調べてみたら(今更ext2なんて使うなと言われそうですが)、ext2ではfdatasyncの方が速い、ext3のopen_syncはメチャ速いような気がしてきました。本当だろうか。あまりアテにしないでね。

ext2 ext3
fsync 39〜45tps 21〜22tps
fdatasync 68〜85tps 21〜22tps
open_sync 30〜45tps 410〜497tps

別の環境でも試してみよう。

Writeback:0

Comment Form

writeback message: Ready to post a comment.

TrackBack ping me at
http://www.mono-space.net/blog/pgsql/040526bench.trackback

Page Top