[解決済み] ストアドプロシージャをウェブから呼び出すと遅く、Management Studioから呼び出すと速い
質問
Web アプリケーションから呼び出されるたびに、非常識なほどタイムアウトするストアド プロシージャがあります。
Sql Profiler を起動し、タイムアウトする呼び出しをトレースして、最終的に以下のことを発見しました。
- MS SQL Management Studio 内から同じ引数でステートメントを実行した場合 (実際、私は sql プロファイル トレースからプロシージャ呼び出しをコピーし、それを実行しました)。平均で 5 ~ 6 秒で終了します。
- しかし、Web アプリケーションから呼び出された場合、30 秒以上 (トレースにおいて) かかるので、私の Web ページはそれまでに実際にタイムアウトしてしまいます。
私の Web アプリケーションが独自のユーザーを持っているという事実を除けば、すべてのことは同じです (同じデータベース、接続、サーバーなど)。 私はまた、Web アプリケーションのユーザーでスタジオで直接クエリを実行してみましたが、6 秒以上かかりませんでした。
どのようにしたら、何が起こっているのかを見つけることができますか?
トレースでは、遅延が実際のプロシージャにあることが明らかなので、BLL > DAL レイヤーやテーブル アダプタを使用していることとは関係ないものと推測しています。考えられるのはそれだけです。
EDIT
でわかったのですが
このリンク
で、ADO.NET が
ARITHABORT
を true に設定します。これはほとんどの場合良いことですが、時々この現象が発生します。
with recompile
オプションを追加することです。私の場合、それはうまくいきませんが、これに非常に類似した何かだと思われます。どなたかADO.NETが他に何をするのか、またはどこでその仕様を見つけることができるかをご存知ですか?
どのように解決するのですか?
過去に同じような問題が発生したことがあるので、この質問の解決策を見たいと思っています。OP に対する Aaron Bertrand のコメントにより、次のようになりました。 Web から実行するとクエリがタイムアウトするが、SSMS から実行すると超高速になる であり、質問は重複していませんが、その回答はあなたの状況に非常によく当てはまるかもしれません。
本質的には、SQL Server に破損したキャッシュ実行プランがあるように思われます。Web サーバーで不良プランをヒットしていますが、SSMS は ARITHABORT フラグに異なる設定があるため、異なるプランに着陸します (それ以外は、特定のクエリ/ストアド プロックに影響を与えないでしょう)。
参照 ADO.NET コール T-SQL ストアド プロシージャが SqlTimeoutException を発生させる を参照してください。
関連
-
NET6新機能 新構造体の最適化
-
30分でわかるコング経由の.NETゲートウェイ
-
.NET開発サーバー アプリケーション管理ツール
-
認証プロセスの記録にjwtを使用したネット
-
[解決済み] ASP.NET WebサイトとASP.NET Webアプリケーションのどちらを選ぶか?
-
[解決済み] ASP.NET MVCでビューをコンパイルする
-
[解決済み] ストアドプロシージャのSELECT FROMの方法
-
[解決済み】SQL Server。クエリーは高速ですが、プロシージャから遅い
-
[解決済み] web.configの変換で "Replace Or Insert "を行う方法はありますか?
-
[解決済み] Razor _layout.cshtml のファイル名の先頭にアンダースコアがあるのはなぜですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
NET6新機能 - 暗黙の名前空間参照
-
ASP.NET Core Dependency Injectionフレームワークの活用
-
ASP.NETでWeb.configからログインする際の正しいアカウントパスワードを確認する
-
非同期タスクキャンセルと監視のネット実装
-
[解決済み] Server Error in '/' Application」エラーの解決方法を教えてください。
-
[解決済み】開発環境と本番環境で異なるWeb.configを使用する。
-
[解決済み] Log4netがログファイルにログを書き込まない
-
[解決済み] フォーム認証のタイムアウトとsessionStateのタイムアウトの比較
-
[解決済み] フレームワークのランタイムターゲットが見つからない .NETCoreApp=v1 互換ランタイムの1つと互換性がある
-
[解決済み] ASP.NET MVCのHtml.ActionLinkに "active "クラスを追加する方法