レガシー・オラクルDBから不変のドメイン・オブジェクトのコレクションを作成するためにnhibernateを使用しています。 Criteria APIを使用した簡単な検索では60秒以上かかる。同じルックアップのその後のルックアップが通常300ミリ秒未満(100ミリ秒でnhibernateで休止する場合)2レベルのキャッシュまたはクエリキャッシュを有効にしないでくださいすべてのクエリはDBに行きますnhibernate prof )。しかし、アプリを数分間放置して再度ルックアップを実行すると、通常は50〜60秒かかりますNHibernateのマッピングが非常に遅い
私はnhibernateプロファイラを使用していますが、私は残りの時間をnhibernateで取らなければならないと思います、なぜ私は理解できませんか?
いくつかの背景情報:私はキー値 ペアに20列をマップする動的な成分を使用しています
- 。 iがマッピング
に動的成分を使用していNHibernateの2.1
を使用
は
- 一旦マッピングでiは可変=偽フラグを使用 午前、データが変更されることはありません取得しました。
- これはレガシーなので、マッピングでは という複合キーを使用しています。
私は私が私がFlushMode =決して
- を設定しているセッションを開くと、私はまた
- (まだ初期のルックアップのパフォーマンスの低下を持っている)ステートレスセッションを試みた各ルックアップで
の周りに50個のオブジェクトをretrivingています私はマッピングでカスタムユーザタイプを定義したり使用したりしないでください
私は明らかに何か間違っているか、何か考えていませんか?
リモートデータベースのように聞こえるでしょうか?最初の接続にはオープンに時間がかかり、その後の接続ではプーリングが利用されますか?コレクションを読み込むために1つのクエリしかかかりませんか? – dotjoe
これで、コレクションをロードするクエリが1つだけになります。私はnhibernate profを使用しています。dbに行くクエリーを1つだけ表示します。また、nhibernate profを表示すると、dbが取る時間は最大300 msです。 – functional