PostgreSQL 7系 の shared_buffers の設定値には注意が必要だ!

【この記事の所要時間 : 約 5 分

以前、canalize.jp – PostgreSQLのパラメータチューニングで、Postgresqlのパラメータチューニングについてエントリーした。

ということで、最終的には以下のパラメータを利用。
1.postgresql.conf
・shared_buffers = 30000
・sort_mem = 4096
・wal_ buffers = 96
・checkpoint_segments = 16
・max_fsm_pages = 100000
2.shmmax (カーネルの共有メモリ量)
/proc/sys/kernel/shmmax = 476472934
/etc/sysctl.conf → 476472934

しかし、この一部のパラメータについて疑問の声が上がった。
そのパラメータとは、shared_buffers(共有メモリ) である。
疑惑のきっかけとなったのは、負荷対策概論なども書いているY-110氏のブログの以下の部分。
PostgreSQL:チューニング勘所 – Y-110’s Wiki

7系 では, 性能のピークは 8000~10000(約80M) の範囲にあります。
shared_buffers を多く取りすぎると, バッファ管理のオーバーヘッドが生じて, 逆に性能が低下してしまいます。8系では shared_buffers の性能が改善され, 150000程度までは性能が低下しないようです。
性能のピークは 100000(約800M)付近にあるようです。8系ではメモリをたくさん積んで shared_buffers を多めに確保したほうが良いでしょう。

現在、shared_buffers = 30000 となっているが、Postgresqlは、7.4系を使っているため、バッファ管理のオーバーヘッドが生じて, 逆に性能が低下しているのではないか?という疑惑である。
この記述の信頼性はどの程度あるのか、調べてみると、ThinkITの「postgresql.confの設定を見直そう」という特集にたどり着いた。
ThinkIT – postgresql.confによるチューニング(1)

shared_buffersには、PostgreSQLのデータベースエンジン(バックエンド)が使用する共有メモリ上のバッファ領域を指定します。shared_buffersは大きすぎても小さすぎても性能が低下します。初期状態ではinitdbの自動設定機能により、1000程度に設定されていると思いますが、できれば8000~10000程度まで引き上げた方がよいでしょう。これ以上の値を指定すると、バッファ管理のオーバーヘッドにより逆に性能が低下します。

しかしながら、この記述の信頼性についてもどうなのか?と思うだろうが、そこは心配いらない。この記事を書いている石井達夫氏は、 PostgreSQLの開発者であり、日本PostgreSQLユーザ会の元理事長であり、日本国内でこの方以上に、Postgresqlについて信頼できる人はほとんどいない。ちなみに上記のThinkITの記事は、以下のようにPostgresql 7.4 を対象としているため、バージョンの違いによる問題もない。

チューニングはデータベースの実装に深くかかわってくるため、PostgreSQLのバージョンに依存します。本稿ではPostgreSQL 7.4系を前提とします。

つまり、Y-110氏のエントリーにある「7系 では, 性能のピークは 8000~10000(約80M) の範囲にあります。」というのは、かなり信頼できるといえる。
ということは、以下のように再度パラメータ変更をしたいと思う。

1.postgresql.conf
・shared_buffers = 10000

今回、Postgresqlのパラメータチューニングについていろいろなサイトをみたが、以下のように石井達夫氏が指摘するように、パラメータチューニングでは、「shared_buffersをできるだけ多くしろ」というサイトが非常に多かったので、注意してほしい。

「メモリが空いているようなのでそれをPostgreSQLで有効に使いたい」という質問に対して「shared_buffersをできるだけ多く取ってください」というような回答を目にすることがよくありますが、前述のようにそれは間違いです。 PostgreSQLでは、むしろ余ったメモリをOSにバッファ領域として使ってもらった方がトータルでの性能が向上します。

まだまだ、7系で運用しているサイトも多いと思う。8系の方が性能が上がっているのは間違いないが、さまざまな制約でバージョンを上げられないサイトもあると思う。ご同輩の方へ。その場合は上記のような点に注意してほしいと思う。
基本に立ち返る意味では、以下の勉強会資料はさらっとチェック!
PostgreSQLをデフォルト設定のまま使っていませんか? – 日本PostgreSQLユーザ会
以下、参考までに。
http://canalize.jp/archives/008035.php

PostgreSQL全機能バイブル
PostgreSQL全機能バイブル

posted with amazlet at 15.11.20
鈴木 啓修
技術評論社
売り上げランキング: 41,371
スポンサーリンク
レクタングル(大)広告
  • このエントリーをはてなブックマークに追加
スポンサーリンク
レクタングル(大)広告

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です