会社の内部Webサイトを作成しました。数か月間スムーズに動作し、ユーザーの提案によりメジャーアップデートを行いました。ライブで実行すると、正常に実行されます。その後、突然、日本のユーザーから「待機操作がタイムアウトしました」というメッセージが送信されました。エラー。特定のリンクへのアクセスを確認すると、私と他の人がそのページにアクセスしているかどうかを確認するように要求する他の人のために正常に実行されます。既にhttpRuntime executionTimeoutを更新していますが、それでも運はありません。データベース接続からのエラーですか?データベース接続のタイムアウトを増やすと、問題は解決しますか?
「待機操作がタイムアウトしました」という正確なエラーが見つかった場合は、予想以上に時間がかかったデータベース呼び出しがある可能性があります。これは、さまざまな原因が考えられます。
トラブルシューティングを行うのに十分な情報を共有していません。私がこれを管理する方法は、問題の他の発生をチェックし、パターンがあるかどうかを確認することです。問題が特定の時刻に発生した場合。
確かにタイムアウトを長くすることは悪い考えではなく(現在かなり低く設定されている場合)、それ自体で問題を解決する可能性があります。
接続タイムアウトとコマンドタイムアウトを増やすことを忘れないでください。
SqlConnection(@"Data Source=SQLSERVER;Initial Catalog=MYCATALOG;Integrated Security=True;Connection Timeout=1000");//huge timeout
その後:
com.CommandTimeout = 950;//or whatever
タイムアウトが発生したイベントビューアーで正確な手順を見つけることで、このエラーを修正しました。
SSMSで同じデータベースに接続して実行しました:
exec sp_recompile 'Procedure name'
以下のメッセージが表示されました。
オブジェクト 'プロシージャ名'は再コンパイル用に正常にマークされました。
Web.configファイルで、接続文字列に移動し、これを追加します。; Integrated Security = True; Connect Timeout = 120 "
別の問題になることもあります。たとえば、1つの接続が開かれている間に多くのクエリを実行し、接続の有効期間を超えた場合。次に、接続文字列にConnection Lifetime
プロパティを設定する必要があります。説明は次のとおりです。
接続がプールに返されると、その作成時間が現在の時間と比較され、その期間(秒単位)がConnection Lifetimeで指定された値を超えると、接続が破棄されます。これは、実行中のサーバーとオンラインになったばかりのサーバーとの間の負荷分散を強制するクラスター構成で役立ちます。値をゼロ(0)にすると、プールされた接続の最大接続タイムアウトが発生します。