Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für: SQL Server
Zusammenfassung
Ein Fehler "Timeout abgelaufen" in SQL Server bedeutet, dass eine Verbindung oder ein Befehlsvorgang nicht innerhalb des Zeitüberschreitungsintervalls abgeschlossen wurde, das die Clientanwendung zulässt, sodass der Client den Vorgang abgebrochen hat, anstatt auf unbestimmte Zeit zu warten. In diesem Artikel können Sie ermitteln, ob Sie ein Verbindungstimeout oder eine Abfrage oder ein Befehlstimeout erreicht haben. Es behandelt die Fehlermeldungen, die möglicherweise mit einem Verbindungstimeout auftreten, und der typische Dienst, Port, Firewall und Namensauflösung verursacht hinter Verbindungstimeouts. Verwenden Sie diesen Artikel, wenn eine Clientanwendung zeitweise oder konsistent keine Verbindung mit einer SQL Server Instanz mit Verbindungstimeoutfehlern herstellen kann.
Informationen zur Problembehandlung von Abfrage- oder Befehlstimeoutfehlern finden Sie unter Problembehandlung bei Abfragetimeoutfehlern.
Notiz
Bevor Sie mit der Problembehandlung beginnen, überprüfen Sie die Voraussetzungen , und durchlaufen Sie die Checkliste.
Timeout abgelaufene Fehlermeldungen beim Herstellen einer Verbindung mit SQL Server
Wenn Probleme mit "Timeout abgelaufen" auftreten, erhalten Sie eine oder mehrere der folgenden Fehlermeldungen:
-
Timeout ist abgelaufen. Das Timeout ist vor dem Beenden des Vorgangs eingetreten, oder der Server reagiert nicht.
-
System.Data.SqlClient.SqlException (0x80131904): Verbindungstimeout abgelaufen. Das Zeitlimit ist während des Versuchs verstrichen, die Handshakebestätigung vor der Anmeldung zu verarbeiten. Dies kann daran liegen, dass beim Handshake vor der Anmeldung ein Fehler aufgetreten ist oder der Server nicht rechtzeitig reagieren konnte. Die Dauer des Verbindungsversuchs zu diesem Server war [Pre-Login] initialization=23; handshake=14979;
System.ComponentModel.Win32Exception (0x80004005): Die Warteoperation wurde abgebrochen. -
System.Data.SqlClient.SqlException (0x80131904): Timeout abgelaufen. Das Timeout ist vor dem Beenden des Vorgangs eingetreten, oder der Server reagiert nicht. System.ComponentModel.Win32Exception (0x80004005): Die Warteoperation wurde abgebrochen.
-
Verbindungstimeoutfehler. Das Zeitlimit ist während des Versuchs verstrichen, die Handshakebestätigung vor der Anmeldung zu verarbeiten. Dies kann daran liegen, dass beim Handshake vor der Anmeldung ein Fehler aufgetreten ist oder der Server nicht rechtzeitig reagieren konnte.
Die Dauer, die beim Versuch, eine Verbindung mit diesem Server herzustellen, war [Pre-Login] initialization=21036; handshake=0; (Microsoft SQL Server, Fehler: -2). -
System.InvalidOperationException: Timeout abgelaufen. Die Timeout-Periode, die verstrichen ist, bevor eine Verbindung aus dem Pool hergestellt werden konnte.
Wenn Verbindungen nicht ordnungsgemäß geschlossen werden, können Fehler auftreten. Diese Fehler treten auf, da alle poolgebundenen Verbindungen verwendet werden und die maximale Poolgröße erreicht ist. Sie können diese Fehler vermeiden, wenn Sie die im Artikel "Verbindungspool " beschriebenen Schritte ausführen. Weitere Informationen zur Funktionsweise des Poolings finden Sie unter SQL Server Verbindungspooling (ADO.NET).
Notiz
Die zweite und die dritten Fehler treten auf, wenn .NET Framework 4.5 oder eine höhere Version installiert wird.
Ermitteln, welcher Timeouttyp aufgetreten ist
Es gibt zwei Arten von Timeoutproblemen, die häufig mit Datenbankanwendungen beobachtet werden:
- Verbindungstimeout (standardmäßig 15 Sekunden)
- Abfrage- oder Befehlstimeout (standardmäßig 30 Sekunden)
Diese beiden Probleme sind in der Natur sehr unterschiedlich, da sie aus verschiedenen Quellen stammen und in separaten unabhängigen Phasen einer Datenbankanwendungsinteraktion auftreten. Ein Verbindungstimeout tritt auf, wenn eine anfängliche Verbindung mit dem Datenbankmodul fehlschlägt. Ein Abfrage- oder Befehlstimeout tritt dagegen viel später in der Lebensdauer einer Anwendungsinteraktion mit einem Datenbankserver auf. Die erste Verbindung wurde erfolgreich abgeschlossen, aber eine Abfrage, die Sie an den Datenbankserver übermittelt haben, dauert lange.
Zeigen Sie vor der Problembehandlung den vollständigen Aufrufstapel der Fehlermeldungen an, um den Fehlertyp zu ermitteln.
Sehen Sie sich das folgende Beispiel für einen Aufrufstapel eines Verbindungstimeouts an:
System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error) at System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket() at System.Data.SqlClient.TdsParser.ConsumePreLoginHandshake(Boolean encrypt,Boolean trustServerCert, Boolean& marsCapable) at System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, SqlConnectionowningObject) at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfoserverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject) at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart) at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance) at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance) at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection) at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options) at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject) at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject) at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) at System.Data.SqlClient.SqlConnection.Open()SqlConnection.Opengibt an, dass der Client versucht, eine Verbindung zu öffnen und daher nicht mit einer Abfrage verknüpft ist.Sehen Sie sich das folgende Beispiel für einen Aufrufstapel einer Abfrage oder eines Befehlstimeouts an:
System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at System.Data.SqlClient.SqlDataReader.ConsumeMetaData() at System.Data.SqlClient.SqlDataReader.get_MetaData() at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) at System.Data.SqlClient.SqlCommand.ExecuteScalar()Die
SqlCommandKlasse wird verwendet, um mit einer Abfrage zu arbeiten, nicht mit einer Verbindung. DieExecuteScalarMethode wird verwendet, um eine Abfrage auszuführen. Sie können auch andere Elemente sehen, z. B. einExecuteReaderoderExecuteNonQuery.Wenn ein Abfrage- oder Befehlstimeoutfehler auftritt, lesen Sie die Problembehandlung von Abfragetimeoutfehlern.
Problembehandlung von Verbindungstimeoutfehlern in SQL Server
Wenn ein Verbindungstimeoutfehler auftritt, führen Sie die folgenden Schritte aus:
Erhöhen Sie den Verbindungstimeoutparameter.
Wenn Sie eine Anwendung zum Herstellen einer Verbindung mit SQL Server verwenden, erhöhen Sie die relevanten Verbindungstimeoutparameterwerte, und überprüfen Sie, ob die Verbindung erfolgreich ist. Wenn Sie beispielsweise verwenden
System.Data.SqlClient, legen Sie die SqlConnection.ConnectionTimeout-Eigenschaft auf 30 oder einen höheren Wert fest. Wenn Sie die aktuelle Microsoft verwenden. Data.SqlClient-Treiber, legen Sie die entsprechende SqlConnection.ConnectionTimeout-Eigenschaft fest.Notiz
Wenn Sie andere Anbieter verwenden, überprüfen Sie die Homepage für die SQL-Clientprogrammierung.
Wenn Sie SQL Server Management Studio (SSMS) verwenden, wählen Sie im Dialogfeld "Verbindung mit Server verbinden" die Registerkarte "Verbindungseigenschaften" aus, und legen Sie die Einstellung "Verbindungstimeout" auf einen höheren Wert fest.
Wenn die Verbindung erfolgreich ist, handelt es sich um ein Netzwerkproblem. Arbeiten Sie mit Ihrem Netzwerkadministrator zusammen, um das Problem zu beheben. Nachdem sie aufgelöst wurde, können Sie zu den Standardeinstellungen in Ihrer Anwendung zurückkehren.
Notiz
Das Erhöhen des Verbindungstimeouts in der Anwendung ist eine mögliche Methode, aber es ist keine langfristige Auflösung. Dies liegt daran, dass die Verbindung schnell (in der Regel innerhalb weniger Millisekunden) erfolgt, wenn Sie versuchen, eine Verbindung mit einer Datenquelle herzustellen.
Dienst-, Port- und Protokollursachen für Verbindungstimeoutfehler
In der folgenden Tabelle sind SQL Server Dienst-, Port- und Netzwerkprotokollursachen für abgelaufene Timeoutfehler und die Behebung der einzelnen Fehler aufgeführt. Weitere Tipps und Vorschläge finden Sie unter Problembehandlung: Timeout abgelaufen.
| Typische Ursachen | Auflösungen |
|---|---|
| Der SQL Server-Dienst auf dem Server wird nicht ausgeführt. | Starten Sie die Instanz des SQL Server-Datenbank-Engine. |
| Der TCP/IP-Port für die Datenbank-Engine Instanz wird durch eine Firewall blockiert. | Konfigurieren Sie die Firewall, um den Zugriff auf die Datenbank-Engine zu ermöglichen. |
| Die Datenbank-Engine lauscht nicht auf Port 1433. Dies liegt daran, dass der Port geändert wird oder nicht die Standardinstanz und der SQL Server-Browserdienst nicht ausgeführt wird. | Starten Sie den SQL Server-Browserdienst, oder geben Sie eine TCP/IP-Portnummer an, um eine Verbindung mit dem Sqlcmd -S <ip_addres>,<port> Befehl herzustellen. Suchen Sie im Fehlerprotokoll die Portnummer, auf die SQL Server lauscht. Weitere Informationen finden Sie unter Konfigurieren eines Servers zum Überwachen eines bestimmten TCP-Ports. |
| Der SQL Server-Browserdienst wird ausgeführt, aber UDP-Port 1434 wird durch eine Firewall blockiert. | Konfigurieren Sie die Firewall so, dass der Zugriff auf UPD-Port 1434 auf dem Server möglich ist, oder geben Sie die TCP/IP-Portnummer an, um eine Verbindung herzustellen. |
| Der Client und der Server sind nicht für die Verwendung desselben Netzwerkprotokolls konfiguriert. | Stellen Sie sicher, dass die Server- und Clientcomputer mindestens ein aktiviertes Protokoll gemeinsam haben, indem Sie SQL Server-Konfigurations-Manager verwenden. Wenn beispielsweise der Client eine Verbindung über TCP/IP-Sockets herstellt, SQL Server jedoch nur benannte Pipes überwacht, kann keine Verbindung hergestellt werden. |
Netzwerk- und Namensauflösungsursachen für Verbindungstimeoutfehler
In der folgenden Tabelle sind Ursachen für abgelaufene Timeoutfehler auf Netzwerkebene aufgeführt, z. B. DNS-Namensauflösungsfehler und TCP/IP-Routingprobleme und wie die einzelnen Fehler behoben werden.
| Typische Ursachen | Auflösungen |
|---|---|
| Der Servername wurde falsch eingegeben. | Versuchen Sie es erneut mit dem richtigen Servernamen. |
| Das Netzwerk kann den Servernamen nicht in eine IP-Adresse auflösen. Testen Sie dieses Problem mithilfe der Ping- oder Telnet-Programme. | Beheben Sie das Problem mit der Computernamenauflösung in Ihrem Netzwerk, oder stellen Sie mithilfe der IP-Adresse eine Verbindung mit dem Server her. Dieses Problem ist kein SQL Server Problem. Hilfe finden Sie in ihrer Windows-Dokumentation, oder wenden Sie sich an den Netzwerkadministrator. Verwenden Sie den folgenden Befehl, um die Konnektivität zu testen:telnet <ServerName> [<Port>]telnet <IP_Address> <Port> Wenn die Verwendung einer IP-Adresse funktioniert, der Servername aber nicht funktioniert, handelt es sich um ein Problem mit der Namensauflösung. |
| Das Netzwerk kann nicht mithilfe der IP-Adresse eine Verbindung herstellen. Testen Sie dieses Problem mithilfe des Ping-, Telnet- oder Tracert-Programms . | Beheben Sie das TCP/IP-Problem in Ihrem Netzwerk. Dieses Problem ist kein SQL Server Problem. Hilfe finden Sie in ihrer Windows-Dokumentation, oder wenden Sie sich an den Netzwerkadministrator. Weitere Informationen zur problembehebung im Netzwerk finden Sie unter 0300 Intermittierendes oder regelmäßiges Netzwerkproblem. |
Verwandte Inhalte
- Behandeln von Konnektivitätsproblemen in SQL-Servern
- Beheben von Problemen mit Abfragezeitüberschreitungen
- Netzwerkbezogener oder instanzspezifischer Fehler beim Herstellen einer Verbindung mit SQL Server
- Sammeln von Daten zur Problembehandlung von SQL Server-Konnektivitätsproblemen
- Zeitweiliges oder regelmäßiges Netzwerkproblem
- Microsoft ADO.NET für SQL Server