[Seasar-user:1493] Re: 【質問】 高負荷時のDBコネクションエラーについて
Hikaru Taniguchi
taniguchi
2005年 2月 15日 (火) 20:26:58 JST
谷口です。
横レスすんませんです
At Tue, 15 Feb 2005 20:10:59 +0900,
yamagoo <[E-MAIL ADDRESS DELETED]> wrote:
(snip)
> ログをみますと
> servletをたたくたびに物理コネクションから取得して
> トランザクションが開始されその中では論理コネクションの出し入れがあり
> コミット後に物理コネクションが閉じられているので、
> 毎回Oracleに戻っちゃっている気がしたのですが・・・
このへんが奇妙ですね...
j2ee.dicon なり ConnectionPoolImpl の timeoutプロパティの値はどうなっ
てますか?
>
> Oracle側も共有サーバモードにしてプール設定にしているので
> 一応プールはされているような気がします。
>
> s2のコネクションプール設定のmaxPoolSizeを10にしておくと
> オラクル側のv$sessionをアプリケーションの接続ユーザでカウントしたら
> 10になるというものではないんですね。
これですが、プールに対してチェックアウト要求がかかったときに空いてい
るものがない && maxに達していない ときにコネクションが作成される、と
いうことと、コネクションがチェックイン(プールに戻される)されたあと一定
時間(timeoutプロパティ)チェックアウトされない場合に物理コネクションの
解放が行われることを考える必要があります。
負荷、というかトランザクションの同時並行数に依存することになります。
ので、maxPoolSize != (count(0) from v$session where...) とはなります。
…という記憶です。間違ってたら恥ずかしい。
> アクセスがあるとカウントアップする仕様のservletを
> 直接ブラウザで開いてリロードしています。
コネクションプールはtimeoutの値が適正なら即時解放はしないような気が
します。ConnectionPoolImpl#close() を呼ぶと即時解放されたと思いますが、
普通は呼ばないかと。 (これも記憶違いかも...)
Servletから参照している S2Containerは Singletonでしょうか...?
# 横レスでむしろ混乱させてたらごめんなさい。
--
Hikaru Taniguchi <[E-MAIL ADDRESS DELETED]>
Seasar-user メーリングリストの案内