PostgreSQLメモ
2007-08-04 - 00:11PostgreSQLのメモリ関係の設定で最初にいじるのは2つ
- shared_buffers
- work_mem
この2つをとりあえず最適値にするだけでそこそこの性能になるはず。
shared_buffers - PostgreSQLが直接使用するキャッシュ用のメモリ。1つのpostmasterで、プロセスがいくつあっても、1つの領域を使用する。DB内のコンテンツがすべて入るサイズ+α確保できると良いらしい。でも、実メモリぎりぎりまですると、他がひどいことになるので気をつけよう。ただ、更新が多いDBの場合これを増やしてもあんまり意味がない。
workmem - こっちの方が設定難しい。これはプロセス毎に確保されてしまうので、慎重に設定しないとOSレベルでswap発生して大変なことになる。でも逆に少なすぎるとPostgreSQLレベルでディスクに一時ファイルを作成してしまいかなりのスピード劣化になる。というわけで、必要最低限+αくらあいがベスト。 なんでもそうだけど><
でも、どれくらいのサイズが必要なのかを計算するのは難しそう。なので、一時ファイルが発生したらちょっと増やしてみる。という場当たり的な方法が情けないけど良さそう。
一時ファイルは、${postgresqldata}/base/*/pgsqltmp/ 以下に作成されるので、そのディレクトリ以下を監視していればいい。 必要な期間が終わると(たいていの場合transactionがcommit/rollbackされると)、自動的に削除されてしまう。 PostgreSQL8.2ではpgsqltmpディレクトリ自体は削除されないようなので、pgsql_tmpディレクトリが存在するということは過去に一時ファイルが作成されたことの痕跡になる。(一時ファイル作成したらログに書くオプションとか探したけどなかった。ソースちょっと見てもなさそう。)
よくある「こう設定しろ」みたいのをそのまますると遅くなることさえあるので、ベンチマークとりながらが必須。 デフォルトで結構速いもんだ。
Trackback link:トラックバック用URLを生成するには、JavaScriptを有効にしてください。