2011-08-08 2 views
1

JPA(Eclipselink 2.0)を使用していくつかのストアドプロシージャを呼び出すGlassfishにアプリケーションをデプロイしました。JPA - サーバーを再起動した後、最初に実行するとストアドプロシージャの呼び出しが遅くなるどうして?

パフォーマンステストを行っていて、glassfishサーバーを再起動してストアドプロシージャを呼び出そうとすると、最初の呼び出しは常に遅くなりました(どのストアドプロシージャを呼び出すかは関係ありません)。それ以降の呼び出しはすべて高速です。なぜこのようなことが起こるのか?

グラスフィッシュモニタを確認したところ、接続に問題はありません。接続時間は約70ミリ秒ですが、ストアド・プロシージャ・コールには1000ミリ秒以上かかります。すべてのサブシーケンスのストアドプロシージャコールは、10ミリ秒未満しかかかりません。

答えて

0

初めてJPAにアクセスするときにコールしますか?そうであれば、JPAは最初にアクセスされたときに永続性ユニットを初期化します。したがって、これはあなたが見ているコストかもしれません。

それ以外の場合は、EclipseLink Performance Profilerを設定して、クエリ時間の使用場所を確認したり、JProfilerなどのJavaプロファイラを使用したりできます。

最新のEclipseLinkリリースでは、永続性単位poety "eclipselink.deploy-on-startup"があります。これにより、永続性ユニットが、最初のアクセスではなく、サーバーの起動時に初期化されます。

+0

Jamesに感謝します。私はeclipselink.deploy-on-startupを設定しようとしましたが、それは時間に影響しないようです。パーシスタンスユニットが「初期化された」ときに正確に何が起こり、これを見るためにプロファイラを設定する必要がありますか? – neo

関連する問題