14

夜間のパフォーマンス テストを実行するプロジェクトがあります。私たちのウェブサイトが何百もの同時「ユーザー」に 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 はデータベースに格納されたツリーであり、識別子による継承を使用します。

4

2 に答える 2

4

もちろん、なぜこれが起こっているのかを言うのは難しいです。ただし、 Hibernate のパフォーマンスを最適化し、問題をデバッグするための優れたリソースがいくつかあります。

リンクされた記事で著者は、パフォーマンスの問題を診断する最善の方法はYourKit Java Profilerを使用することであると提案しています。負荷とパフォーマンスの環境がリモートで、プロファイラーをローカルで実行できない場合は、リモートでアタッチできます。もちろん、プロファイラーを実行するとオーバーヘッドが発生するため、プロファイラーがアタッチされているためにパフォーマンス特性が変化することがあります。それでも、何が起こっているのかを突き止めるには、おそらくこれが最善の方法です。

その他の便利なリンク:

http://java.dzone.com/articles/debugging-hibernate-generated http://jroller.com/jcarreira/date/20050223#hibernate_tips

于 2013-07-23T00:49:04.367 に答える
0

お使いの Oracle は 9 以下ですか?データベースが破損している可能性があります。念のため、データベースをエクスポートおよびインポートでき ます

于 2013-07-25T04:31:07.533 に答える