[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 メーリングリストの案内