[pgsql-jp: 30344] Re: PostgreSQL用コネクションプールサーバ pgpool

Tatsuo Ishii t-ishii @ sra.co.jp
2003年 7月 2日 (水) 21:52:49 JST


石井です.

> 川崎です。 pgpool 面白いですね! 期待!

どうもです.今後は大規模な環境で検証し,性能向上に努めたいと思っていま
す.

> PostgreSQL 自身に prefork しておくの機能がないのは何故なのでしょうね。
> DB処理に特化して、周囲の本業でないことをやらないという方針なのか、
> あるいは pgpool に触発されて(!?)、次期 7.x で本体に搭載されるとか!?
> (データ同期のため等で技術的に実現不可能、ということはないですよね)
> 
> コネクションプールしない環境では、本来のDB処理以外の fork 処理の
> 負荷も高く、マシンの性能を十分に発揮できていない気もします。
> prefork ならCGIからアクセスする場合にも効果が期待できます。

別にPostgreSQLのバックエンドプロセスを多数preforkしておくようなアーキ
テクチャにできないこともないと思いますが(クライアントの接続が切れた後,
再度各種変数や状態を確実に初期化するのが意外と面倒なのですが...),DB 
エンジン的にそれが正しい方向かどうかは何とも言えないと思います.個人的
には,DBへの処理要求をキューイングし,少数のプロセスで処理したほうがトー
タルの効率は良くなると思います.良く知らないのですが,たぶんOracleなど
の商用DBはそういう構造になっているのではないでしょうか.

それはともかく,現状のPostgreSQLの構造が素朴すぎて良くないのは事実です.
ご指摘のように,forkのオーバヘッドもさる事ながら,accept()を発行するの
がpostmasterプロセス1本だけ,というのも問題だと思います.どうもシステ
ムの負荷が高いときに,postmasterがボトルネックになって,外部からの接続
要求をこなしきれていないような気がします.

# pgpoolは複数のプロセスがaccept()を実行するため,この問題はpgpoolを噛
# ませるとかなり改善されます.

> iptables 等の併用も現実的かと思いますが、
> 個人的には、pgpool 単体にもアクセス許可IPアドレスのリスト指定や、
> または hosts.allow 参照とかあると良いですー!!

そういうのでいいですか?そういうのなら簡単に実装できます.個人的には,
PostgreSQLのpg_hba.confと同じ機能を持たないと駄目かなと思っていて,で
もそれだとPostgreSQLがすでに同じことをやっているのを再実装するか,コー
ドをコピーしなければならないので美しくないな... と悩んでいたのでした:-)

> または、pgpool は各WWWサーバで稼動させて、
> ソケット接続を使うのが、本来の使い方想定でしょうか。

セキュリティの問題を別にして,どのようにapache, pgpool, PostgreSQLを配
置するのが効果的なのかは今後検証したいと思っています.

pattern 1:
	machine A: apache+pgpool
	machine B: PostgreSQL

pattern 2:
	machine A: apache
	machine B: pgpool+PostgreSQL

pattern 3:
	machine A: apache
	machine B: pgpool
	machine C: PostgreSQL

のどれがよいのか,はたまた目的やプラットフォームによって最適なpattern
は異なるのか...

> これからも、よろしくお願いいたします!

こちらこそ!
--
Tatsuo Ishii



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