2011-12-14 6 views
3

に.NET 2から切り替えた後、私たちは、アプリが大幅に遅くなったサイトの減速やエラー.NET 4

  1. 4に2から、従来のWebアプリケーションの.NETバージョンを変更し、
  2. 我々今、いくつかのケースでは、このエラーを取得する:

    エラーがSELECT Qにスローされ

    System.Data.SqlClient.SqlException: Transaction (Process ID 85) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.

検索/ルックアップ・タイプの操作を実行している間は使用できません。 (更新タイプ操作ではない)。

レガシーアプリはかなり古いですNHibernateはバージョン2.2を実行しています。そのパッケージは多くのクエリを生成します。最新のバージョン3.2にアップグレードしてもスピードは向上しませんでした。それはエラーを取り除くように見えます。しかしそれは他のバグを引き起こすので、我々は主要な分析なしでアップグレードすることはできません&テスト。

最後に、私の質問:

  1. 任意の提案ですか?

  2. 私たちは、SQLクエリにWITH (NOLOCK)を追加し、エラーが去っていきました。しかし、これが他の問題を引き起こす可能性はありますか(このエラーの原因となるユーザーの操作中に更新が行われないとすれば、トランザクションが検索に関係する理由はわかりません)。

私たちはこのアプリには非常に新しく、別の開発者から引き継いだものです。だから、どんな助けもありがたいです。たとえデバッグのしかたをしているだけですらあります。私たちは多くのことを試していますが、NHibernateにはあまりよく知られていませんので、特にNHibernateと.NETバージョンの洞察はすばらしいでしょう。

+0

? –

+0

ダビデは、私は、インデックスを見てstackoverflowのからいくつかのクエリを実行しましたが、啓発何も表示されません。私は何を探していますか?ありがとう。 – royappa

+0

私はいくつかのことを追加する必要があります。最初に、データベースはアップグレードされていない別のサーバー上にあります。次に、1つのテーブルに1つのフィールド(いくつかのユーザー設定を格納する文字列フィールド)を追加しました。そのテーブルにはIDフィールドのインデックスしかありませんでした。 – royappa

答えて

2

一つの可能​​性は、アップグレードがエラーを導入している、あなたは優雅にrollbackを発行していないことです。このように奇妙なことに、.net2から.net4へのアップグレードは、NHセッションの問題をもたらした可能性があります。これは、クラシックモードから統合モードに移行した場合にも当てはまります。

私の理論を割り引く一つの選択肢は、NHProfをダウンロードしてローカルで(ストレステストを含む)テストを実行して、セッションが適切に開閉していないかどうかを確認することです。

セッションの問題ではない場合でも、NHProfは問題のあるクエリの場所を表示することがあります。テスト中に私はSQL Server Profilerを呼び出してDavidの理論をディスカウントします。

私は、これら二つのオプションは、あなたの最善の策だと思います。あなたのインデックス车内

+0

私はクラシックからインテグレーションにも変わったと思います。私はあなたの提案を試みます。どうもありがとう、ここまで戻ってきます。 – royappa

+0

結局のところ、このプロジェクトを引き継ぐ過程で我々が作り出した小さなコード変更であることが判明しました。私たちの開発者は何かをテストするためにdevモードでスイッチを反転させ、それをオフにするのを忘れていました。それは生きるために昇進した。 NHProfを使用することは、あなたが言ったように、何が起きているのかを理解するのに大いに役立ちました。そして、私たちがSVN diffsを見て私たちが何をしたのかを簡単に知ることができたら、あなたとSQLのプロファイリングに関するヒントについてはDavidにも大変感謝しています。 – royappa

+0

ありがとう、おそらくあなたは私の答えを受け入れるとマークして投票することができます。私はちょうどあなたに+1 – Rippo