Webアプリケーションから呼び出されるたびにめちゃくちゃにタイムアウトするストアドプロシージャを使用しています。
Sqlプロファイラーを起動して、タイムアウトした呼び出しをトレースし、最終的に次のことを見つけました。
- 同じ引数を使用して、MS SQL Management Studio内からステートメントを実行すると(実際、プロシージャコールをSQLプロファイルトレースからコピーして実行しました)、平均5〜6秒で終了します。
- しかし、Webアプリケーションから呼び出された場合、30秒以上(トレース)かかるため、私のWebページは実際にはそれまでにタイムアウトになります。
私のWebアプリケーションに独自のユーザーがいるという事実は別として、すべてが同じです(同じデータベース、接続、サーバーなど)また、Webアプリケーションのユーザーを使用してスタジオで直接クエリを実行してみましたが、6を超えることはありません秒。
何が起こっているのかを知るにはどうすればよいですか?
トレースが遅延が実際の手順にあることを明確に示しているため、BLL> DALレイヤーまたはテーブルアダプターを使用しているという事実とは何の関係もないと想定しています。それは私が考えることができるすべてです。
編集私はこのリンクでADO.NET ARITHABORT
がtrueに設定していることを発見しました-ほとんどの場合これは良いですが、これは時々起こります、そして推奨される回避with recompile
策はストアドプロシージャにオプションを追加することです。私の場合、動作していませんが、これに非常に似ていると思います。誰もがADO.NETが他に何をしているのか、または仕様をどこで見つけられるのか知っていますか?