[Seasar-user:2914] Re: コネクションプーリングの設定と動作

sato sato
2005年 11月 24日 (木) 12:10:40 JST


NSQ@佐藤です。

たにぐち さん。早い回答、ありがとう御座います。

>たにぐちです。
>
>(inline)
>At Thu, 24 Nov 2005 11:39:14 +0900,
>sato <[E-MAIL ADDRESS DELETED]> wrote:
>(前略)
>> 現在は、物理コネクション数 = V$SESSIONの該当行数となっています。
>> 
>> クライアントからの要求でサーバーは複数回DBに接続しているのですが、接続
>> の1回目のみ物理コネクションで、2回目以降は論理コネクションとなっていま
>> す。
>> その際、物理コネクションを取得したタイミングでV$SESSIONに該当行が増えて
>> います。
>> 物理コネクションは10分経つと物理コネクションが閉じられた旨のログが出力
>> され、V$SESSIONの該当行数も1行減ります。
> ここだけを読むと S2DBCPの動作してはまったく正しいもののように思われ
>ます。ただ、「再利用できていない」ように思われるということは、2回目以
>降のSQLを発行するときに、論理コネクションは返却されているはずなのに、
>また新しく物理コネクションを取りにいっているように見える、ということな
>のでしょうか?
>
> まだ状況がよくわからないところがあります。

2回目以降の論理コネクションの際には、1回目で取得した物理コネクションを
再利用している様子です。
(V$SESSIONのセッション数は論理コネクションの数だけ増えている訳ではなく、
物理コネクションの数だけ増えているから、そのように推測します。)

>
> 個人的にも興味があるというのもありますが、当該事象がわかる範囲のログ
>を(ログが短ければ)MLか、私個人宛に送ってもらったりできませんか?? 何か
>助けることが出来るかもしれません。 

抜粋して転記します。
この処理を実行した際のV$SESSIONの該当行は2行です。

動作としては以下のようになります。

一覧画面------------------->EditLogic
              ・編集画面表示データ取得--->SELECT
編集画面<-------------------Forward(success)

編集画面でデータ入力

編集画面------------------->EntryLogic
              ・データ有無チェック--->SELECT
              ・データありと判定
              ・データ更新----------->UPDATE
編集完了画面<---------------Forward(success)

---[log start]------------------------------------
2005-11-24 11:16:47,181 [http8080-Processor3] DEBUG (?:?) - doLogic() : 
業務ロジックの実行
2005-11-24 11:16:47,181 [http8080-Processor3] INFO  (?:?) - EditLogic#
init()
2005-11-24 11:16:47,201 [http8080-Processor3] INFO  (?:?) - EditLogic#
doStart()
2005-11-24 11:16:47,441 [http8080-Processor3] DEBUG (Logger.java:102) - 
物理的なコネクションを取得しました
2005-11-24 11:16:47,451 [http8080-Processor3] DEBUG (Logger.java:102) - 
論理的なコネクションを取得しました
2005-11-24 11:16:47,712 [http8080-Processor3] DEBUG (Logger.java:102) - 
論理的なコネクションを閉じました
2005-11-24 11:16:47,722 [http8080-Processor3] DEBUG (Logger.java:43) - 
SELECT /*省略*/ FROM WatchingServer WHERE server_code = 1
2005-11-24 11:16:47,722 [http8080-Processor3] DEBUG (Logger.java:102) - 
論理的なコネクションを取得しました
2005-11-24 11:16:47,732 [http8080-Processor3] DEBUG (Logger.java:102) - 
論理的なコネクションを閉じました
2005-11-24 11:16:47,742 [http8080-Processor3] INFO  (?:?) - EditLogic#
doEnd()
2005-11-24 11:16:47,742 [http8080-Processor3] DEBUG (?:?) - doLogic() : 
正常終了
2005-11-24 11:16:47,742 [http8080-Processor3] INFO  (?:?) - [FW]  Action 
Forward.  >>>  view = success
2005-11-24 11:16:49,264 [http8080-Processor3] DEBUG (?:?) - doLogic() : 
業務ロジックの実行
2005-11-24 11:16:49,264 [http8080-Processor3] DEBUG (?:?) - EntryLogic#
init()
2005-11-24 11:16:49,294 [http8080-Processor3] INFO  (?:?) - EntryLogic#
doStart()
2005-11-24 11:16:49,674 [http8080-Processor3] DEBUG (Logger.java:102) - 
物理的なコネクションを取得しました
2005-11-24 11:16:49,684 [http8080-Processor3] DEBUG (Logger.java:102) - 
論理的なコネクションを取得しました
2005-11-24 11:16:49,945 [http8080-Processor3] DEBUG (Logger.java:102) - 
論理的なコネクションを閉じました
2005-11-24 11:16:49,955 [http8080-Processor3] DEBUG (Logger.java:43) - 
SELECT /*省略*/ FROM WatchingServer WHERE server_code = 1
2005-11-24 11:16:49,955 [http8080-Processor3] DEBUG (Logger.java:102) - 
論理的なコネクションを取得しました
2005-11-24 11:16:49,965 [http8080-Processor3] DEBUG (Logger.java:102) - 
論理的なコネクションを閉じました
2005-11-24 11:16:49,965 [http8080-Processor3] DEBUG (Logger.java:102) - 
論理的なコネクションを取得しました
2005-11-24 11:16:49,965 [http8080-Processor3] DEBUG (Logger.java:43) - 
UPDATE WatchingServer SET check_time = '2005-11-18 13.55.59', ip_address 
= '127.0.0.1', server_name = 'ローカル' WHERE server_code = 1
2005-11-24 11:16:49,985 [http8080-Processor3] DEBUG (Logger.java:102) - 
論理的なコネクションを閉じました
2005-11-24 11:16:49,995 [http8080-Processor3] INFO  (?:?) - EntryLogic#
doEnd()
2005-11-24 11:16:49,995 [http8080-Processor3] DEBUG (?:?) - doLogic() : 
正常終了
2005-11-24 11:16:49,995 [http8080-Processor3] INFO  (?:?) - [FW]  Action 
Forward.  >>>  view = success
---[log end]--------------------------------------

上記のログではCliena<--->Server間の通信は2回だけだったのでV$SESSIONは2
行した増えていませんが、画面遷移を繰り返す度にV$SESSIONが増えてしまい、
処理を続けて行くとセッション数の超過によりエラーとなってしまいます。
>
>> 「コネクションプーリングは適用されているが、DAOにたいしてトランザクショ
>> ンの自動制御が適用されていない為にコネクションが再利用出来ていない。」
>> という事でしょうか?
>  requiredTxを外しても同様の事象とのことでしたので、この結論を出すには
>早い気がします。

まだまだ、Seasarの動きが理解できておらず、思慮が足らずご迷惑をお掛けしま
す。
少しづつSeasarのソースを見たりして理解を深めて行こうとはしているのですが、
業務に追われてなかなか思うようには行かないのが正直な所です。
ソースをみた感じではS2DBCPに問題はないように思ったので、設定が悪いのだろ
うと思い、この度メールを投稿させて頂いた次第です。




Seasar-user メーリングリストの案内