Hibernate newbie here。Hibernate - 最初のクエリは常により長くロードします
最初のレベルのキャッシュは、セッションが開いている場合にのみ利用可能です。セッションが閉じられると、第1レベルのすべてのキャッシュされたエンティティが追い出され/削除されます。これは正しいです?
私は、Hibernateフレームワークを使ってJavaで開発されたシンプルなCRUDアプリを持っています。私のアプリケーションが起動するたびに、最初のクエリ操作をロードして実行するたびに、実行時間は通常、後続のクエリ操作よりも長くなります。最初のクエリは通常、実行に17msかかり、成功するには1〜2msです。
私の質問は、これは本当にアプリケーションの開始時に休止状態の動作ですか?最初のクエリ操作から読み込まれたデータはどこかのキャッシュに保存されていますか? (間違いなく最初のクエリ操作を実行した後、セッションはすぐに終了するのでセッションキャッシュではありません)eager loadingがこの動作に影響しますか?
Hibernateのドキュメントではこれをカバーしていなかったので、どこから始めるべきか分かりません。私が間違っているなら、私を訂正してください。
私は本当にこれについて読んでどこから始めるべきかわからないので、私は助けていただきありがとうございます。
EDIT:詳細情報については、ここでは第一および第二のクエリ操作の休止統計だ:
まず:
100222 nanoseconds spent acquiring 1 JDBC connections; 0 nanoseconds spent releasing 0 JDBC connections; 23238430 nanoseconds spent preparing 3 JDBC statements; 8333256 nanoseconds spent executing 3 JDBC statements; 0 nanoseconds spent executing 0 JDBC batches; 0 nanoseconds spent performing 0 L2C puts; 0 nanoseconds spent performing 0 L2C hits; 0 nanoseconds spent performing 0 L2C misses; 40215588 nanoseconds spent executing 1 flushes (flushing a total of 3 entities and 3 collections); 135213 nanoseconds spent executing 1 partial-flushes (flushing a total of 0 entities and 0 collections)
第二:
168597 nanoseconds spent acquiring 1 JDBC connections; 0 nanoseconds spent releasing 0 JDBC connections; 2332976 nanoseconds spent preparing 3 JDBC statements; 6427565 nanoseconds spent executing 3 JDBC statements; 0 nanoseconds spent executing 0 JDBC batches; 0 nanoseconds spent performing 0 L2C puts; 0 nanoseconds spent performing 0 L2C hits; 0 nanoseconds spent performing 0 L2C misses; 1095389 nanoseconds spent executing 1 flushes (flushing a total of 3 entities and 3 collections); 17600 nanoseconds spent executing 1 partial-flushes (flushing a total of 0 entities and 0 collections)
同じクエリの実行ですが、異なるexecutiオンタイム長。
おそらく、最初のクエリによって、永続性ユニットが初期化され、コンテナによって初期化されるデータソースと塗りつぶされる接続プールがトリガされる可能性があります。 – Gimby
@ジンビーそれはすべて17ミリ秒よりもはるかに長くかかります。 –
@DraganBozanovic私のローカルglassfish/payaraインストールに依存して、永続ユニットはすぐにセットアップされますが、最初に使用されたときに発生します。おそらく、サーバがオンデマンドで物理的に何を設定するのか、そうでないのかに依存します。私のポイントは、最初の使用初期化ヒットは珍しいことではないということです。 – Gimby