コネクションプーリング都市伝説をめぐる誤解

http://d.hatena.ne.jp/naoya/20060912/1158058322とかhttp://d.hatena.ne.jp/yamaz/20060903のお話。Javaアプリケーションサーバーな界隈の方は都市伝説どころか有用性に助けられていることも多いかと思います。Perl界ではあまり有効じゃないのねと思ったらどうもプールの話じゃない。
id:naoyaさんが書いている

ウェブアプリケーションから DB への接続を開けっ放しにして、接続に必要とされるオーバーヘッドをカットして双方の負荷を下げる。
ウェブアプリケーションと DB への接続を「使いまわす」ことで、同時接続本数を節約する。

の前者はその後でも触れている通り、PoolingじゃなくてPersistantの話ですねぇ。コネクションプールと言う言葉そのものに誤解があるのが都市伝説と思われてしまう原因のような気がします。一回作ったものを複数から使えるようにプールに溜めておいて、使う人はそこから持っていく(足りないときは待っているか新しく作るか。上限次第)というのがプール。プールが泳ぐ場所を意味するものと思っていた昔、AD&Dのなんかのタイトルで初めてそういう意味じゃないのを知ったのですが、そんなわけで何の気なしにカタカナ英語で使っているうちに本来の単語の意味を意識しなくなってしまったのが罠だったのでしょう。いずれにせよ、Javaはヒープ食い言語だし、いちいちプロセスが上がるわけでもないのでVM内のメモリはできるだけ使わないほうがよい、なので使いまわせるものを上手く使いまわすような実装をよく行います。コネクションに限らずいろいろと。ある程度のスケールをもったアプリケーションであれば大抵の場合、非常に有効です。
ところでOracleでストアドで配列渡しをプール使ってやるとNative Memoryが枯渇してVMが落ちますよと。困っているのですよ…