夜間のパフォーマンス テストを実行するプロジェクトがあります。私たちのウェブサイトが何百もの同時「ユーザー」に 3 時間アクセスされるのは、毎晩同じテストです。パフォーマンス結果は 2 つの状態 (悪いか良いか) のいずれかになり、各状態はそれ自体と一致しているように見えます。私たちのデータベース担当者 (オラクル) は、パフォーマンスが悪い日には、パフォーマンスが良い日よりもはるかに多くの呼び出しがあることに気付きましたが、クエリは 1 つだけでした。
これまでの私の分析から、休止状態がプロキシを使用する/使用しないことを選択することに関係していると思いますが、休止状態がある日とそうでない日には何がそうするように指示するのか理解できません。Hibernate でこのような不規則な非決定論的動作を引き起こす原因は何ですか? 私は Hibernate 4.2.0 と春を使用しています。2 次キャッシュは使用していません。サーバーには他のアプリケーションはありません。
この呼び出しを発生させるオブジェクトは、親/子を介して関連付けられたオブジェクトの長いチェーンの最後にあります。私たちはこのチェーンの先頭に立っています。
悪い実行、9wu... クエリの 4m の実行に注意してください
9wu... クエリが 630k 実行されていることに注目してください。
編集:これをモジュールでほとんど再現することはできません。-xmx を非常に低く (28m) 設定すると、余分な呼び出しは発生しないように見えますが、xmx = 128m でほとんど実行されます。Hibernate のどこで、プロキシするかどうかを決定する理由/方法を確認できるヒントはありますか?
編集 2: モジュールで一貫して再現できません。5回の実行でうまくいき、3回失敗してから失敗します。まったく同じ単体テストを実行するたびに。これは N+1 の問題のように見えます。「select item0...」クエリを介して一連の子をロードしますが、正常に実行されている間は、別のクエリを使用するか、Web サービス間のエントリを破棄しません。呼び出します。オブジェクトを難読化し、詳細を提供するために何ができるかを見ていきます。残念なことに、IT はデータベースに格納されたツリーであり、識別子による継承を使用します。