[pgsql-jp: 34588] Re: PostgreSQLメモリサイジング

EBIHARA, Yuichiro ebihara @ iplocks.co.jp
2005年 1月 5日 (水) 18:07:41 JST


海老原です。

谷田さん、情報をどうもありがとうございます。

>>(1)共有メモリ
>>マニュアルに従えば、次の計算式により共有メモリサイズを計算できそうです。
>>
>>共有メモリ(bytes) = shared_buffers * 8192
>>                  + wal_buffers * 8192
>>                  + max_fsm_pages * 6
>>                  + max_fsm_relations * 50
> 
> 
> マニュアルにその式はなかったと思います。おそらくpostgresql.confを元に作
> 成したものと思いますが、その計算式には以下のようなものが考慮されていませ
> ん。。
> 
> ・固定的に取られるもの
> ・max_connectionsに比例して取られるもの

実際には、マニュアルのここを参考にしました。

http://www.postgresql.jp/document/pg745doc/html/runtime-config.html#RUNTIME-CONFIG-RESOURCE

ちょっと早合点でしたね。

> たとえば以下のURLには、
> 
> http://www.postgresql.jp/document/pg734doc/admin/kernel-resources.html
> 
> 250 kB + 8.2 kB * shared_buffers + 14.2 kB * max_connections
> 
> という数式が出ています。

この計算式であれば、手元環境では問題にならない程度の誤差で出てきました。

理論値: 8,277,606.4 bytes
実測値: 8,667,136   bytes

> ちなみに、どのようなものが取得されているかは
> src/backenc/storage/ipci.cあたりが参考になりませんか?

参考になります。ここを見るだけで、共有メモリを構成するコンポーネントの種
類くらいは想像がつきますね。
ただ今回は細かい数字よりも、多少の誤差は許容して楽にサイジングをしたいの
で、さらに深く追うのはやめにしておきます。

> デバッグオプションレベルを上げると、確か初期火事に必要容量を表示してくれ
> たと思いますので、そっちがより確実と思います。

早速試してみました。
7.3.4なので、server_min_messages = debug5 に設定して起動したところ、共有
メモリに関連しそうなところでは、次のような行が出力されました。

DEBUG:  invoking IpcMemoryCreate(size=8667136)

このサイズはipcsの結果と一致するので(当たり前か)、7.3.4ではどっちを使っ
ても同じようです。

共有メモリについては、環境があればこれらの方法で実測、そうでなければ

> 250 kB + 8.2 kB * shared_buffers + 14.2 kB * max_connections

を使うのが良さそうです。

-- 
アイピーロックス ジャパン株式会社

海老原 雄一郎 / EBIHARA, Yuichiro
  Email: ebihara @ iplocks.co.jp





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