Time-out verlopen berichten bij het verbinding maken met SQL Server
Van toepassing op: SQL Server
Opmerking
Voordat u begint met het oplossen van problemen, controleer de vereisten en doorloop de controlelijst.
Een time-outfout betekent dat een bepaalde bewerking langer duurt dan nodig is. De clienttoepassing stopt de bewerking (in plaats van voor onbepaalde tijd te wachten), waardoor andere bewerkingen kunnen worden geblokkeerd en een toepassing kan worden onderbroken. Dit artikel bevat oplossingen voor fouten met 'opdrachttime-out' en 'verbindingstime-out' die u ontvangt wanneer u verbinding maakt met SQL Server.
Verlopen time-outfouten controleren
Wanneer u problemen ondervindt met 'time-out verlopen', ontvangt u een of meer van de volgende foutberichten:
-
Time-out is verlopen. De time-outperiode is verstreken voordat de bewerking is voltooid of de server reageert niet.
-
System.Data.SqlClient.SqlException (0x80131904): Time-out van de verbinding is verlopen. De time-outperiode is verstreken tijdens het gebruik van de handshake-bevestiging voorafgaand aan de aanmelding. Dit kan zijn omdat de handshake voorafgaand aan het aanmelden is mislukt of de server niet op tijd kon reageren. De duur van de poging om verbinding te maken met deze server was [Pre-Login] initialization=23; handshake=14979;
System.ComponentModel.Win32Exception (0x80004005): er is een time-out opgetreden voor de wachtbewerking. -
System.Data.SqlClient.SqlException (0x80131904): Time-out is verlopen. De time-outperiode is verstreken voordat de bewerking is voltooid of de server reageert niet. System.ComponentModel.Win32Exception (0x80004005): er is een time-out opgetreden voor de wachtbewerking.
-
Verbindingstime-out verlopen. De time-outperiode is verstreken tijdens het gebruik van de handshake-bevestiging voorafgaand aan de aanmelding. Dit kan zijn omdat de handshake voorafgaand aan het aanmelden is mislukt of de server niet op tijd kon reageren.
De duur die is besteed bij het maken van verbinding met deze server was [Pre-Login] initialization=21036; handshake=0; (Microsoft SQL Server, fout: -2). -
System.InvalidOperationException: time-out is verlopen. De time-outperiode is verstreken voordat er een verbinding uit de groep is verkregen.
Als verbindingen niet correct zijn gesloten, kunnen er fouten optreden. Deze fouten treden op omdat alle groepsverbindingen in gebruik zijn en de maximale groepsgrootte is bereikt. U kunt deze fouten voorkomen als u de stappen volgt die worden beschreven in het artikel over de uitgeputte verbindingsgroep .
Opmerking
De tweede en de derde fout treden op wanneer .NET Framework 4.5 of een latere versie is geïnstalleerd.
Het type verlopen time-outfouten bepalen
Vanuit connectiviteitsperspectief ondervindt u de volgende time-outproblemen:
- Verbindingstime-out (standaard 15 seconden)
- Time-out voor query's of opdrachten (standaard 30 seconden)
Opmerking
De standaardwaarden kunnen worden ingesteld via code, verbindingsreeks of andere methoden.
Bekijk voordat u het probleem oplost de volledige aanroepstack van de foutberichten om het fouttype te bepalen.
Zie het volgende voorbeeld van een aanroepstack van een verbindingstime-out:
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.Open
geeft aan dat de client een verbinding probeert te openen en daarom niet is gerelateerd aan een query.Zie het volgende voorbeeld van een aanroepstack van een query- of opdrachttime-out:
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()
De
SqlCommand
klasse wordt gebruikt om te werken met een query, niet met een verbinding. DeExecuteScalar
methode wordt gebruikt om een query uit te voeren. U kunt ook andere items zien, zoals eenExecuteReader
ofExecuteNonQuery
.
Problemen met verlopen time-outs oplossen
Als er een query- of opdrachttime-outfout optreedt, raadpleegt u Problemen met time-outfouten van query's oplossen.
Als er een verbindingstime-outfout optreedt, voert u de volgende stappen uit:
Verhoog de parameter voor verbindingstime-out.
Als u een toepassing gebruikt om verbinding te maken met SQL Server, verhoogt u de relevante parameterwaarden voor verbindingstime-outs en controleert u of de verbinding uiteindelijk slaagt. Als u bijvoorbeeld
System.Data.SqlClient
gebruikt, stelt u de SqlConnection.ConnectionTimeout eigenschap in op 30 of een hogere waarde.Opmerking
Als u andere providers gebruikt, controleert u de Startpagina voor SQL-clientprogrammering.
Als u SQL Server Management Studio (SSMS) gebruikt, selecteert u het tabblad Verbindingseigenschappen in het dialoogvenster Verbinding maken met server en stelt u de Time-outinstelling voor de verbinding in op een hogere waarde.
Als de verbinding uiteindelijk slaagt, is dit een netwerkprobleem. U moet samenwerken met uw netwerkbeheerder om het probleem op te lossen. Nadat dit is opgelost, kunt u de standaardinstellingen in uw toepassing herstellen.
Opmerking
Het verhogen van de verbindingstime-out in de toepassing is een mogelijke methode, maar het is geen oplossing voor de lange termijn. Dit komt doordat de verbinding snel plaatsvindt (meestal binnen enkele milliseconden) wanneer u verbinding probeert te maken met een gegevensbron.
Typische oorzaken en oplossingen voor de fout
De volgende tabel bevat typische oorzaken en oplossingen voor verlopen time-outfouten. Zie Probleemoplossing: Time-out verlopen voor meer tips en suggesties.
Typische oorzaken | Oplossingen |
---|---|
De servernaam is onjuist getypt. | Probeer het opnieuw met de juiste servernaam. |
De SQL Server-service op de server wordt niet uitgevoerd. | Start het exemplaar van de SQL Server database-engine. |
De TCP/IP-poort voor het Database-engine-exemplaar wordt geblokkeerd door een firewall. | Configureer de firewall om toegang tot de Database-engine toe te staan. |
De Database-engine luistert niet op poort 1433. Dit komt doordat de poort is gewijzigd of omdat deze niet het standaardexemplaar is en de SQL Server Browser-service niet wordt uitgevoerd. | Start de SQL Server Browser-service of geef een TCP/IP-poortnummer op om verbinding te maken met de Sqlcmd -S <ip_addres>,<port> opdracht. Zoek in het foutenlogboek het poortnummer waarop SQL Server luistert. |
De SQL Server Browser-service wordt uitgevoerd, maar UDP-poort 1434 wordt geblokkeerd door een firewall. | Configureer de firewall om toegang tot UPD-poort 1434 op de server toe te staan of geef het TCP/IP-poortnummer op om verbinding te maken. |
De client en server zijn niet geconfigureerd om hetzelfde netwerkprotocol te gebruiken. | Zorg ervoor dat de server- en clientcomputers ten minste één ingeschakeld protocol gemeen hebben met behulp van SQL Server Configuration Manager. Als de client bijvoorbeeld verbinding maakt via TCP/IP-sockets, maar SQL Server alleen luistert op named pipes, kan er geen verbinding tot stand worden gebracht. |
Het netwerk kan de servernaam niet omzetten in een IP-adres. Dit kan worden getest met behulp van de ping- of telnet-programma's. | Los het probleem met de naamomzetting van de computer op uw netwerk op of maak verbinding met de server met behulp van het IP-adres. Dit is geen SQL Server-probleem. Raadpleeg uw Windows-documentatie of neem contact op met uw netwerkbeheerder voor hulp. Gebruik de volgende opdracht om de connectiviteit te testen:telnet <ServerName> [<Port>] telnet <IP_Address> <Port> Als het gebruik van een IP-adres werkt, maar de servernaam niet werkt, is het een probleem met naamomzetting. |
Het netwerk kan geen verbinding maken met behulp van het IP-adres. Dit kan worden getest met behulp van het ping-, telnet- of tracert-programma. | Los het TCP/IP-probleem op uw netwerk op. Dit is geen SQL Server-probleem. Raadpleeg uw Windows-documentatie of neem contact op met uw netwerkbeheerder voor hulp. Zie 0300 Onregelmatig of periodiek netwerkprobleem voor meer geavanceerde oplossingen voor het netwerk. |