突然、「System.ComponentModel.Win32Exception:The wait operation timed out」を示すすべてのSQLサーバー要求。問題を見つける最も速い方法は何ですか?
Stack Trace:
[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) +1767866
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +5352418
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +244
System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +1691
System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() +61
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, SqlDataReader ds) +1406
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) +177
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.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior) +10
System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +140
System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +316
System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable) +86
System.Web.UI.WebControls.SqlDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) +1481
System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +21
ブロッキングの問題を引き起こしているSQlを取得しました。
http://www.sqlskills.com/blogs/paul/script-open-transactions-with-text-and-plans/
ここで私が問題を見つけることができた方法、最初にすべての開いているトランザクションをデータベースで確認し、
DBCC OPENTRAN ('Databse')
開いているトランザクションがある場合は、SPIDを取得してINPUTBUFFER内に配置します。
DBCC INPUTBUFFER (58)
これにより、実際のSQLが得られます。必要に応じて、このトランザクションを強制終了できます。
KILL 58
ところで、私のアプリケーションでは、READ COMMITTEDデータを使用できます。
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
または
Select * from Products WITH NoLock
SQlをすばやく見つける別の方法を次に示します。
SELECT
[s_tst].[session_id],
[s_es].[login_name] AS [Login Name],
DB_NAME (s_tdt.database_id) AS [Database],
[s_tdt].[database_transaction_begin_time] AS [Begin Time],
[s_tdt].[database_transaction_log_bytes_used] AS [Log Bytes],
[s_tdt].[database_transaction_log_bytes_reserved] AS [Log Rsvd],
[s_est].text AS [Last T-SQL Text],
[s_eqp].[query_plan] AS [Last Plan]
FROM
sys.dm_tran_database_transactions [s_tdt]
JOIN
sys.dm_tran_session_transactions [s_tst]
ON
[s_tst].[transaction_id] = [s_tdt].[transaction_id]
JOIN
sys.[dm_exec_sessions] [s_es]
ON
[s_es].[session_id] = [s_tst].[session_id]
JOIN
sys.dm_exec_connections [s_ec]
ON
[s_ec].[session_id] = [s_tst].[session_id]
LEFT OUTER JOIN
sys.dm_exec_requests [s_er]
ON
[s_er].[session_id] = [s_tst].[session_id]
CROSS APPLY
sys.dm_exec_sql_text ([s_ec].[most_recent_sql_handle]) AS [s_est]
OUTER APPLY
sys.dm_exec_query_plan ([s_er].[plan_handle]) AS [s_eqp]
ORDER BY
[Begin Time] ASC;
GO
http://www.sqlskills.com/blogs/paul/script-open-transactions-with-text-and-plans/
次のコマンドを実行してみてください:
exec sp_updatestats
このタイプのSQL Serverタイムアウトエラーは、特定のテーブルをINSERTまたはUPDATEしようとすると、そのテーブルで長時間実行SELECTクエリが現在実行されている場合に発生します(SELECTの分離レベルによって異なります)。
関連:
私たちの場合、問題は次の理由によるものでした:
デッドロックはなく、クライアントサービスとSQL Serverには十分なリソースがありました。
1)パッチ/サービスパックのロールバックをテストし、機能しました(非推奨)
2)(推奨): Microsoftによると 、上記の条件によりエラーが発生します:
アプリケーションがMicrosoft .NET Framework 3.5またはMicrosoft .NET Framework 4データプロバイダーを使用して、Microsoft SQL Server(SQLClient)がミラーリングされたデータベースに接続すると、次のエラーメッセージが表示されることがあります。
タイムアウトになりました。操作が完了する前にタイムアウト期間が経過したか、サーバーが応答していません。 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception、Boolean breakConnection)at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()at System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj、UInt32 error) .SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult、TdsParserStateObject stateObj)at System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()at System.Data.SqlClient.TdsParser.ConsumePreLoginHandshake(Boolean encrypt、Boolean trustServer、Boolean trustServer、Boolean trustServer、Boolean trustServer SqlClient.TdsParser.Connect(ServerInfo serverInfo、SqlInternalConnectionTds connHandler、Boolean ignoreSniOpenTimeout、Int64 timerExpire、Boolean encrypt、Boolean trustServerCert、Boolean IntegratedSecurity)at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo、String newPasswordr、Timeout newPassword、Timeout SqlConnection owningObject)はSystem.Data.SにありますqlClient.SqlInternalConnectionTds.LoginWithFailover(Boolean useFailoverHost、ServerInfo primaryServerInfo、String failoverHost、String newPassword、Boolean redirectedUserInstance、SqlConnection owningObject、SqlConnectionString connectionOptions、TimeoutTimer timeout)注ConnectionTimeoutプロパティがデフォルト値の15秒に設定されている場合、エラーを受け取ることがあります接続が1.2秒間開いた後のメッセージ。
この問題は、ミラーリングされたデータベースの接続再試行アルゴリズムのエラーが原因で発生します。
再試行アルゴリズムを使用すると、データプロバイダーは最初の読み取り(SniReadSync)呼び出しが完了するまで待機します。呼び出しはSQL Serverを実行しているバックエンドコンピューターに送信され、待機時間は接続タイムアウト値に0.08を掛けて計算されます。ただし、応答が遅い場合、および待機時間が経過する前に最初のSniReadSync呼び出しが完了しない場合、データプロバイダーは接続を誤った状態に設定します。
注この場合の遅い応答は、サーバーまたはネットワーク遅延のいずれかによってトリガーされる可能性があります。
解決
この問題は.NET Framework 4.5.2で解決されています。 .NET Framework 4.5.2に加えて、他の.NETFrameworkバージョン
詳細と修正プログラムのダウンロード: https://support.Microsoft.com/en-us/help/2605597/fix-time-out-error-when-a-mirrored-database-connection-is-created- by-t
私もこの問題を見つけましたが、なんとか修正しました。
元々、私はすべてのSQL Serverサービスを手動で開始するように設定していました。しかし、これは(しばらくしてSQL Server(server_name)だけを起動した後、このエラーが発生しました。これを修正するには、SQL Server BrowserとSQL Server Agent(server_name)も起動する必要があることがわかりました。
SQL Serverエージェント(server_name)は使用されていなかったため、手動で開始されなかったため、自動に戻し、別のプロセスが使用したときに開始されるようにしました。
sQL Server Browserサービスを停止して再起動するだけで、問題が解決しました