0

ストアド プロシージャを実行してテーブル内のレコードを更新すると、タイムアウト エラーが発生するという問題が発生しています。私はもともと MVC3 アプリケーション内からストアド プロシージャを呼び出していましたが、そこで最初にエラーに気付きました。

しかし、SQL Server プロファイラーを使用して、ADO.NET によって生成されたコードをコピーし、データベース上で直接実行することができました。このクエリを約 5 分間実行しましたが、それでも何も返されませんでした。

ここにいくつかの事実があります:

  1. ストアド プロシージャには、渡される約 100 個の引数があります。

  2. 私の MVC アプリケーション、SSMS、および Sql Server 2008 はすべて同じマシンにインストールされています。

  3. ストアド プロシージャは、約 5000 エントリを含むテーブル内の 1 つの行を更新しようとします。

  4. LastModifiedDateとを更新するトリガーがありましたが、CreatedDateこれらのトリガーを削除し、EDMX を更新して、これらのトリガーによって引き起こされる無限ループがあるかどうかを判断しました。

  5. 私たちのライブ サーバーは、実行しようとしているものとまったく同じストアド プロシージャ (クラシック ASP を使用) を実行し、正しい結果を達成します。さらに、ライブ サーバーは .NET で同じストアド プロシージャを実行できません。

  6. 私のマシンは、従来の ASP と ASP.NET の両方のストアド プロシージャを実行できません。

  7. ストアド プロシージャは、いくつかの行でのみ失敗したようで、他の行は完全に正常に動作します。

  8. ストアド プロシージャに渡されるパラメータの値を変更しようとしました

  9. 他のストアド プロシージャは正常に動作します

  10. ストアド プロシージャが更新しようとしていた特定のテーブルがロックされているようです。これは、このクエリの実行を待機している場合でも、他のクエリの実行が正常に機能していたためです。

私が実行できる他のテスト、またはタイムアウトエラーの根本原因を特定するために使用できるツールについて誰かがアイデアを持っている場合。

ありがとう。

PSコマンドタイムアウトプロパティを変更するように言わないでください。これをゼロに設定しようとしました!

4

1 に答える 1

0

私は2つのことを考えることができます:

  1. ストアド プロシージャで例外処理を既に実装していると思います。そうでない場合は、そうして、まず問題文を把握してみてください。あなたが言うとき、それはいくつかの行で起こります、それは悪いデータが原因である可能性がありますか? で例外処理を行う方法については、これをお読みください。SQL Server 2008

  2. デッドロックがあるかどうかを調べてみましたか? 詳細な手順と理解については、こちらをお読みください。

于 2012-04-16T04:34:00.967 に答える