[Seasar-user:6186] Re: [DBFlute] 初回テーブルアクセスについて
kubo
[E-MAIL ADDRESS DELETED]
2007年 2月 15日 (木) 03:05:12 JST
久保です。
> > 初回テーブルアクセスについて、
> > 論理的なコネクションの「取得」と「閉じる」が多数発生している
> > ようで、アクセスが遅いのですが、
> > 何かお気づきの点など、ございませんでしょうか。
> >
> > 論理的なコネクションの回数を減らして初回アクセスの
> > 速度を上げることなど可能でしょうか。
>
> こちらの動きを説明させて頂きます。
>
> 初回アクセス時に、S2Daoが該当Daoのメソッドを初期化します。
> その時、そのDaoクラスに定義されたメソッド分の初期化が走り、
> メソッドの初期化毎に内部でDBメタ情報を取得するため、
> 提示させて頂いたログのようなことになります。
机上ではありますが、S2Daoのソースを見て検証しました。
「論理的なコネクションの取得」はConnectionPoolから生成済みの
Connectionを借りるだけなのため、それ自体は、
Performance劣化の直接の原因ではないと考えられます。
では、何が初回アクセス時のPerformance劣化になっているかと、
A. BeanMetaDataの初期化
B. 該当DaoクラスのDaoメソッド全ての初期化
です。
Aに関しては:
避けられない初期化ではあります。
Bに関しては:
メソッド単位の初期化にすることで、
初回アクセス時を速くすることは可能かもしれません。
起動時に全てを初期化することで、初回アクセスは早くできるかも
しれませんが、Container起動時が遅くなり、運用時はOKなものの、
JUnitでの自動テストの際はさらに遅くなってしまいます。
初期化処理はどこかでやらなければならないため、
どのような仕様であるべきかは非常に難しい問題かもしれません。
本番運用時は、「Container時に全て初期化」にして
JUnitなどの単体テスト時は「都度初期化」にするというような
切り替えが設定ファイルレベルで指定できれば理想ですかね...
--
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
kubo <[E-MAIL ADDRESS DELETED]>
jflute <http://d.hatena.ne.jp/jflute>
株式会社ビルドシステム <http://www.buildsystem.co.jp>
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
Seasar-user メーリングリストの案内