Plötzlich zeigten alle SQL Server-Anforderungen "System.ComponentModel.Win32Exception: Der Wartevorgang überschritten". Wie kann ich das Problem am schnellsten finden?
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
Ich habe die SQl, die das Blockierungsproblem verursacht, durch,
http://www.sqlskills.com/blogs/paul/script-open-transaktionen-mit-text-and-plans/
Wie ich das Problem finden konnte, Überprüfen Sie zunächst alle offenen Transaktionen Ihrer Datenbank.
DBCC OPENTRAN ('Databse')
Wenn es eine offene Transaktion gibt, dann schnappen Sie sich die SPID und fügen Sie sie in INPUTBUFFER ein
DBCC INPUTBUFFER (58)
Dadurch erhalten Sie die tatsächliche SQL. Wenn Sie möchten, können Sie diese Transaktion beenden,
KILL 58
Übrigens, in meiner Anwendung kann ich READ COMMITTED-Daten verwenden,
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
Oder
Select * from Products WITH NoLock
Hier ist ein weiterer Weg, um die SQl schnell zu finden,
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-transaktionen-mit-text-and-plans/
Versuchen Sie diesen Befehl auszuführen:
exec sp_updatestats
Dieser Typ eines SQL Server-Zeitüberschreitungsfehlers kann bei dem Versuch auftreten, eine bestimmte Tabelle einzufügen oder zu aktualisieren, wenn derzeit eine lang andauernde SELECT-Abfrage für diese Tabelle ausgeführt wird (abhängig von der Isolationsstufe von SELECT).
Verbunden:
In unserem Fall wurde das Problem aus folgenden Gründen verursacht:
Es gab keine Deadlocks und die Clientdienste sowie SQL Server waren gut ausgestattet.
1) Wir haben ein Rollback der Patches/des Service Packs getestet und es hat funktioniert (Nicht empfohlen)
2) (Recommended): Laut Microsoft setzen uns die obigen Bedingungen für den Fehler ein:
Wenn eine Anwendung Microsoft .NET Framework 3.5 oder Microsoft .__ verwendet. .NET Framework 4-Datenprovider für Microsoft SQL Server (SQLClient) an Wenn Sie eine Verbindung zu einer gespiegelten Datenbank herstellen, wird möglicherweise die folgende Fehlermeldung angezeigt Botschaft:
Zeitüberschreitung. Die Zeitüberschreitung ist vor .__ vergangen. Abschluss des Vorgangs oder der Server antwortet nicht. beim System.Data.SqlClient.SqlInternalConnection.OnError (SqlException Ausnahme, Boolean breakConnection) um System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning () um System.Data.SqlClient.TdsParserStateObject.ReadSniError (TdsParserStateObject StateObj, UInt32-Fehler) um System.Data.SqlClient.TdsParserStateObject.ReadSni (DbAsyncResult AsyncResult, TdsParserStateObject stateObj) um System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket () um System.Data.SqlClient.TdsParser.ConsumePreLoginHandshake (Boolean Encrypt, Boolean trustServerCert, Boolean und marsCapable) um System.Data.SqlClient.TdsParser.Connect (ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolesche Verschlüsselung, Boolean trustServerCert ..... System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin (ServerInfo ServerInfo, String newPassword, Boolean ignoreSniOpenTimeout, TimeoutTimer-Timeout, SqlConnection owningObject) um (0)......................................................................... Eigenschaft ist auf den Standardwert gesetzt Wert von 15 Sekunden erhalten Sie möglicherweise die Fehlermeldung nach der Verbindung ist für 1,2 Sekunden geöffnet.
Dieses Problem tritt aufgrund eines Fehlers im Verbindungswiederholungs-Algorithmus für gespiegelte Datenbanken.Auf. _
Wenn der Wiederholungsalgorithmus verwendet wird, wartet der Datenanbieter auf die Erster Lesevorgang (SniReadSync) zum Beenden. Der Anruf wird an die .__ gesendet. Back-End-Computer, auf dem SQL Server ausgeführt wird, und die Wartezeit ist berechnet durch Multiplikation des Verbindungs-Timeout-Werts mit 0,08 . Der Datenprovider legt jedoch eine Verbindung falsch zu einem Doomed .__ fest. state, wenn eine Antwort langsam ist und der erste SniReadSync-Aufruf nicht .__ ist. abgeschlossen, bevor die Wartezeit abläuft.
Hinweis Die langsame Antwort kann in diesem Fall entweder durch die .__ ausgelöst werden. Server oder nach Netzwerklatenz.
Auflösung
Dieses Problem ist behoben in .NET Framework 4.5.2. In Ergänzung zu .NET Framework 4.5.2, für andere .NET sind Hotfixes verfügbar F Framework-Versionen
Weitere Informationen und Hotfix-Download: https://support.Microsoft.com/de-de/help/2605597/fix-time-out-error-when-a-mirrored-database-connection-iscreated -von-t
Ich habe dieses Problem auch gefunden, aber es ist mir gelungen, es zu beheben.
Ursprünglich hatte ich alle SQL Server-Dienste so eingestellt, dass sie von mir manuell gestartet werden. Dieser Fehler (nach einer Weile des Startens von SQL Server (Servername)) trat jedoch auf, und ich musste feststellen, dass SQL Server Browser und SQL Server Agent (Servername) ebenfalls gestartet werden mussten.
Der SQL Server-Agent (Servername) wurde nicht manuell gestartet, da er nicht verwendet wurde. Daher habe ich ihn auf "Automatisch" gesetzt, sodass er gestartet wird, wenn er von einem anderen Prozess verwendet wird.
stoppen Sie einfach und starten Sie den SQL Server-Browser erneut. Das Problem wurde dadurch gelöst