っで,エンジニアはどこまでやらないといけないのか書いてあげないの?

ようするに内々ではWeb屋さんでもpg_pconnect()は気をつけろってことになっていると思いますが,アンサーソング(吐血 をつらつら書いてみます.

それをやればOK?

で、そこまでわかっている人間が誰かに伝えるべきことは、pg_pconnect使うと障害対応で人間やめることになるよなどという意味不明な極論ではなくて、例えば「PHPスクリプトを動かすhttpdと画像やCSSを送り出すhttpdは別にしよう」ということだ。 知らずに思考停止しているだけであればまあアレだが(笑)、知っててなおシャレや冗談のつもりで話しているならば誤解を招きすぎである。

PostgreSQLのチューニングだけやってもたいして楽になれない」ということを読み取って欲しかったわけで(苦笑
読み取ってもらえたのかもしれないですけどじゃーhttpdを別にするにはどうしたらいいのか? ってのも教えてあげた方がいいのでは? っで,それをやったらもう楽になれるの? とか.
同一サーバー資産で複数目的のhttpdの立ち上げをすると当然メモリー消費の具合も変わってきます.大丈夫すか? リバースプロキシーとかやるとさらにメモリーが必要になるでしょう.

ちなみにCSSなどだけではなく静的HTMLのリクエストも同様に無駄な接続が維持されることになります.これも「動的HTML生成と静的HTML生成のhttpdは別にするべき」とかですかね.
さてこれってサーバー構成の対処だけでできるんですかね? ファイル配置の設計見直しとかが必要だろうし話がずいぶんでかくなってくる気がするんですけど.

そういうことも想定させずに「こやればできるよ」って中々いい提案すね(笑
研究レベルならまぁそれもありかもしれないですけど,実務でこのレベルでやっちゃ火を噴きますよ(笑
もし「実務でもろこういったケースに対処しないといけないんだけどやり方がわからない…」というレベル感の人ならあなたの環境ではどんだけの人や資材を使わないと実現できないか(イコールコストになるか)も含めて考えてください.

pgpoolを間に置くこととpg_pconnect()の違い

なお、pgpoolのことも言及されているようだがpgpoolも結局apacheと同じアイデアでpreforkで複数プロセスを待機させる方式である。pgpoolが常駐するだけでそこそこリソースを食ってしまうというジレンマ。 そんなこともあってか、現代のpgpool-IIではコネクションプーリングよりもレプリケーションや負荷分散のほうに力点が置かれている。

どちらかというとpg_pconnect()とpgpoolを間に挟ませるのは実際のところあまり同じではありません.しいていうとコンテンツ次第というのもありますが.

  1. PHPが直接PostgreSQLに接続する場合,pg_pconnect()を使うとCSSの読み込みや静的HTMLのリクエストですらtimeout的な要素はリセットされます(また数えなおし).
  2. しかしPHPがpgpoolに接続に来なければtimeoutまでのカウントは継続されます.

たとえばpgpoolのタイムアウトが100の場合,PHPが1リクエストされ,その後静的HTMLやCSSのリクエストのみが継続するような場合,PostgreSQLの接続が切れることが期待できます.
実際はここまで楽観しできるものではないですが,pgpoolをはさんだ場合,いわゆるページビューに近いレベルでの接続状態の維持を期待することができます.

もっともpgpool-IIの話はおっしゃるとおり,レプリケーション目的でpgpool-IIがいいのかは別の話になってくるので(えてしてそうでない場合も少なくない),置いておきます.
しいていうとSRA OSSに相談するといいと思いますよ(笑

また,pgpoolを間に挟んで1台のサーバーというのも結構つらいので,まじめに言うと現実的ではありません.
つまるところ「資材の交換もできずに現状使っている1台のサーバーでどうにかしないといけない」という人にできることは結構限られています.
まじめにコツコツチューニングか資材交換の提案を実現するか,あるいは別のソリューションがあれば…という程度ではないでしょうか.

まとめ

結論としてはこのネタもエントリーも所詮木,もしくは枝の話です.
酒の肴にしたら1回程度のネタだと思います.
読んだ人が前向きにいろいろ吸収したいという気持ちがあるなら,これを含む「木」を含めて「森はなんだろう」ということを考えるようにしてもらえるとこれ幸い.

関連記事: