- 2004-10-24
- pgsql
ファイルシステムやマウントオプションがどれくらい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 |
別の環境でも試してみよう。