[pgsql-jp: 38408] Re: パラメータ「shared_buffers」について

Hiroki Kataoka kataoka @ interwiz.jp
2007年 5月 11日 (金) 01:01:26 JST


片岡です。

Daisuke Arai さんは書きました:
> ・できれば8000〜10000程度まで引き上げたほうがいい。それ以上のを指定すると
> バッファ管理のオーバーヘッドにより逆に性能が低下してしまう。
> ・共有バッファは以下の計算で求められる。
>  ((空きメモリの合計) と (データベースサイズ + 512K) の少ない方)) / 8192
> ・簡単な目安として、サーバマシンの搭載メモリ量の1/4〜1/2がお勧め。
> 通常は1/4程度でいいと思うが、潤沢なメモリ量を搭載している高性能サーバ
> マシンの場合には1/2というのも有力。
> というように、あちらこちらでそれぞれの自論が述べられています。
> どの説が一番正しいのでしょうか。

 共有バッファサイズの決め方を3つ引用されていますが、これらには共通の意
見が隠れています。「デフォルト値は小さすぎるから大きくせよ」です。

 では異なる点は何かというと…

 1番目は明確に上限を書いてありますが、これはバージョン7.4までを対象にし
ている文献だと思われます。8.0からバッファ管理周りが改善されていますの
で、この上限はなくなっています。

 2番目と3番目は上限の決め方が異なるように見えますが、「サーバのメモリが
足りなくならない範囲で大きくする」という点では同じです。

 2番目だけはデータベースサイズというパラメータが現れていますが、これは
データベースよりもはるかに大きい共有バッファは無駄なので、それを考慮して
いるのでしょう。

> また、私が管理しているサーバでは、どの程度の値が適当でしょうか。
> 主なスペックは、
> OS:RedHat Linux 9
> メインメモリ:2GB
> 共有メモリセグメントの最大サイズ(SHMMAX):1GB
> PostgreSQLのバージョン:7.3.4

 最適な共有バッファサイズを決める要因はサーバの性能だけではありません。
例えば以下も必要です。

・データベースのサイズ
・データベースの特徴(アクセスパターンなど)
・同時接続数(空きメモリが減るため)

なので、サーバのスペックを聞いただけでは誰も答えられません。ただ、

> 「shared_buffers」のデフォルト値は、「64」となっております。

鈴木さんも書かれているように、もっと大きくするべきなのは間違いありませ
ん。ただ私の個人的意見ですと、バージョン7.3でしたら、データベースサイズ
を考慮しながら1000〜8000の範囲で決めるのがいいと思います。これより大きく
しても、メモリを失う分に見合った性能向上が得られたことがありません。

-- 
Hiroki Kataoka <kataoka @ interwiz.jp>



pgsql-jp メーリングリストの案内