web-dev-qa-db-ja.com

Win32Exception(0x80004005):待機操作がタイムアウトしました

私は、ASP.NET Webページページを実行しています。このページは、初期読み込み時にSQLサーバーからアイテムのリストを取得します。このクエリは1秒ほどで実行され、2秒以内にページを読み込みます。返品は、約1000レコード(ギブまたはテイク)です。 Service Manager SQLデータベースから他の情報とともにホスト名を取得しています。

このページ内には、本質的にまったく同じクエリを実行するが、ホスト名に基づいてLIKEを使用して実行する検索が組み込まれています。これにより、検索クエリの一部を含むすべてのホスト名で同じページがロードされます。通常、クエリは1秒以内にSQL Management Studio内で実行されますが、ページの読み込みにはかなり時間がかかり、タイムアウトすることもあります。

私の質問は、なぜパラメーターベースの検索に時間がかかり、明らかな理由もなくタイムアウトすることがあるのか​​ということです。このタイムアウトを緩和するために実行できる手順はありますか?以下は完全なエラーです。

「/」アプリケーションのサーバーエラー


The wait operation timed out 

説明:現在のWebリクエストの実行中に未処理の例外が発生しました。エラーの詳細とコードのどこで発生したかについては、スタックトレースを確認してください。

例外の詳細:

System.ComponentModel.Win32Exception: The wait operation timed out
Source Error: 

Line 13:     }
Line 14:     
Line 15:     var selectedData = db.Query(selectCommand, searchTerm);
Line 16: 
Line 17:

Source File:  c:\Users\u0149920\Documents\My Web Sites\AppSupport\servers\default.cshtml    Line:  15

スタックトレース:

[Win32Exception (0x80004005): The wait operation timed out]
[SqlException (0x80131904): Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.]
   System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +1753346
   System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +5295154
   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +242
   System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +1682
   System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() +59
   System.Data.SqlClient.SqlDataReader.get_MetaData() +90
   System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +365
   System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite) +1325
   System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) +175
   System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +53
   System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +134
   System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) +41
   System.Data.Common.DbCommand.ExecuteReader() +12
   WebMatrix.Data.<QueryInternal>d__0.MoveNext() +152
   System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) +381
   System.Linq.Enumerable.ToList(IEnumerable`1 source) +58
   WebMatrix.Data.Database.Query(String commandText, Object[] parameters) +103
   ASP._Page_servers_default_cshtml.Execute() in c:\Users\u0149920\Documents\My Web Sites\AppSupport\servers\default.cshtml:15
   System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +197
   System.Web.WebPages.WebPage.ExecutePageHierarchy(IEnumerable`1 executors) +69
   System.Web.WebPages.WebPage.ExecutePageHierarchy() +151
   System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +76
   System.Web.WebPages.WebPageHttpHandler.ProcessRequestInternal(HttpContextBase httpContext) +114

バージョン情報:Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.17929

45
Bolson32

あなたが抱えている問題は、クエリコマンドに時間がかかりすぎていることです。クエリを実行するデフォルトのタイムアウトは15秒だと思います。コマンドが実行を完了するのに十分な長さになるように、CommandTimeout(秒単位)を設定する必要があります。 「CommandTimeout」は、接続文字列の「接続タイムアウト」とは異なり、コマンドごとに設定する必要があります。

Sql Selecting Eventで、次のコマンドを使用します。

e.Command.CommandTimeout = 60

例えば:

Protected Sub SqlDataSource1_Selecting(sender As Object, e As System.Web.UI.WebControls.SqlDataSourceSelectingEventArgs)
    e.Command.CommandTimeout = 60
End Sub
32
Jeff

私よりも多くのことを知っているすべての人に、それを役に立たなかったり誤解を招くようにマークするのではなく、もう一度読んでください。ロックされたスレッドによってすべてのリソースが消費されるため、仮想マシン(VM)が応答しなくなるという問題があったため、スレッドを強制終了することが唯一の選択肢でした。長いクエリを実行している人にはこれをお勧めしませんが、応答しないVMまたは何かで立ち往生している人には役立つかもしれません。その最大の個人が電話に出ます。はい、クエリを強制終了しますが、VMマシンが破壊されるのを防ぎました。

Serverstackはすでに同様の質問に回答しました。 VMマシン上のSQLに関する私の問題を解決しました。 こちら を確認してください

インデックスの問題を修正するには、次のコマンドを実行する必要があります。

exec sp_updatestats
23
Sanjay Zalke

Entity Frameworkを使用している場合、次の操作を行うことで、デフォルトのタイムアウトを延長できます(長時間実行されるクエリの完了までの時間を長くするため)。

myDbContext.Database.CommandTimeout = 300;

ここで、myDbContextはDbContextインスタンスであり、300は秒単位のタイムアウト値です。

(Entity Framework 6現在の構文)

6
Jon Schneider

同じ問題がありました。 exec sp_updatestatsを実行すると動作することもありましたが、常にではありませんでした。クエリを高速化するために、クエリでNOLOCKステートメントを使用することにしました。 FROM句の後にNOLOCKを追加するだけです。例:

SELECT clicks.entryURL, clicks.entryTime, sessions.userID
FROM sessions, clicks WITH (NOLOCK)
WHERE sessions.sessionID = clicks.sessionID AND clicks.entryTime > DATEADD(day, -1, GETDATE())

記事全文を読む こちら

5
Flo

データベースのインデックス再作成テーブルを調べます。

断片化レベルを最初に調べることができます-10%を超えている場合は、インデックスを再作成することでメリットが得られます。それが非常に高い場合、これは重要なパフォーマンスのボトルネックを作り出している可能性があります。

http://blog.sqlauthority.com/2009/01/30/sql-server-2008-2005-rebuild-every-index-of-all-tables-of-database-rebuild-index-with- fillfactor /

これは定期的に行う必要があります。

4
niico

ここで他の回答と他のいくつかの回答を試しました。 SQLサービスを停止して再起動しました。何も機能しませんでした。

ただし、コンピューターの再起動は機能しました。

4
MiniRagnarok

このエラーは、ローカル開発用の以前の接続文字列の一部にData Source =。/が含まれていた2008 SQL Serverから2014 SQL Serverへのアップグレード後に発生しました

        <add name="MyLocalDatabase" connectionString="Data Source=./;Initial Catalog=SomeCatalog;Integrated Security=SSPI;Application Name=MyApplication;"/>

これを./から(ローカル)またはlocalhostに変更すると、問題が修正されました。

<add name="MyLocalDatabase" connectionString="Data Source=(local);Initial Catalog=SomeCatalog;Integrated Security=SSPI;Application Name=MyApplication;"/>
2
Brett Bim

テーブルにプライマリキーがなかったため、タイムアウトエラーが発生しました。キーを設定した後sloved。

1
leyla azari

この問題は、sqlcommandの実行時間により発生します。 CommandTimeout = 100または要求値を設定します

秒単位のタイムアウト値@注最適な値を提供する方が良い

0
mydeenali