Verlopen time-outberichten bij het maken van verbinding met SQL Server
Van toepassing op: SQL Server
Notitie
Voordat u begint met het oplossen van problemen, controleert u de vereisten en doorloopt u 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 'command-timeout' en 'connection-timeout'-fouten 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 verstreken. De time-outperiode is verstreken voordat de bewerking werd voltooid, of de server reageert niet.
-
System.Data.SqlClient.SqlException (0x80131904): Verbindingstime-out is verlopen. De time-outperiode is verstreken tijdens het gebruik van de bevestiging van de handshake vóór aanmelding. Dit kan komen doordat de handshake vóór aanmelding is mislukt of omdat de server niet op tijd kon reageren. De tijd die werd doorgebracht met het proberen 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 werd voltooid, of de server reageert niet. System.ComponentModel.Win32Exception (0x80004005): Er is een time-out opgetreden voor de wachtbewerking.
-
Verbindingstime-out is verstreken. De time-outperiode is verstreken tijdens het gebruik van de bevestiging van de handshake vóór aanmelding. Dit kan komen doordat de handshake vóór aanmelding is mislukt of omdat de server niet op tijd kon reageren.
De duur die is besteed tijdens een poging om verbinding te maken met deze server was [Pre-Login] initialisatie=21036; handshake=0; (Microsoft SQL Server, fout: -2). -
System.InvalidOperationException: Time-out is verlopen. De time-outperiode is verstreken voordat een verbinding is verkregen van de groep.
Als verbindingen niet correct zijn gesloten, kunnen er fouten optreden. Deze fouten treden op omdat alle gegroepeerde verbindingen worden gebruikt en de maximale poolgrootte is bereikt. U kunt deze fouten voorkomen als u de stappen volgt die worden beschreven in het artikel over een uitgeputte verbindingsgroep .
Notitie
De tweede en de derde fout treden op wanneer .NET Framework 4.5 of een latere versie is geïnstalleerd.
Bepalen welk type time-out is verlopen
Vanuit het oogpunt van connectiviteit ondervindt u de volgende time-outproblemen:
- Time-out voor verbinding (standaard 15 seconden)
- Time-out voor query's of opdrachten (standaard 30 seconden)
Notitie
De standaardwaarden kunnen worden ingesteld via code, verbindingsreeks of andere methoden.
Bekijk voordat u problemen gaat oplossen 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 met een query te werken, 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
Zie Time-outfouten voor query's oplossen als er een query- of time-outfout optreedt.
Als er een verbindingstime-outfout optreedt, volgt u de stappen:
Verhoog de time-outparameter voor de verbinding.
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 de eigenschap SqlConnection.ConnectionTimeout gebruikt
System.Data.SqlClient
, stelt u deze in op 30 of hoger.Notitie
Als u andere providers gebruikt, controleert u de startpagina voor het programmeren van SQL-clients.
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 verbinding in op een hogere waarde.
Als de verbinding uiteindelijk slaagt, is dit een netwerkprobleem. U moet samenwerken met de netwerkbeheerder om het probleem op te lossen. Nadat dit is opgelost, kunt u teruggaan naar standaardinstellingen in uw toepassing.
Notitie
Het verhogen van de verbindingstime-out in de toepassing is een mogelijke methode, maar het is geen oplossing op lange termijn. Dit komt doordat de verbinding snel plaatsvindt (meestal binnen een paar milliseconden) wanneer u verbinding probeert te maken met een gegevensbron.
Typische oorzaken en oplossingen voor de fout
De volgende tabel bevat veelvoorkomende oorzaken en oplossingen voor verlopen time-outfouten. Zie Probleemoplossing: Time-out verlopen voor meer tips en suggesties.
Typische oorzaken | Oplossingen |
---|---|
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 laten. |
De database-engine luistert niet op poort 1433. Dit komt doordat de poort wordt gewijzigd of niet het standaardexemplaren 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 voor het gebruik van hetzelfde netwerkprotocol. | Zorg ervoor dat de server- en clientcomputers ten minste één protocol hebben dat gemeenschappelijk is ingeschakeld met behulp van SQL Server Configuration Manager. Als de client bijvoorbeeld verbinding maakt via TCP/IP-sockets, maar SQL Server alleen luistert op benoemde pijpen, 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 ping- of telnet-programma's. | Los het probleem met de computernaamomzetting in uw netwerk op of maak verbinding met de server met behulp van het IP-adres. Dit is geen PROBLEEM met SQL Server. Raadpleeg uw Windows-documentatie of neem contact op met uw netwerkbeheerder voor hulp. Gebruik de volgende opdracht om connectiviteit te testen:telnet <ServerName> [<Port>] telnet <IP_Address> <Port> Als het gebruik van een IP-adres werkt, maar de servernaam niet werkt, is dit een probleem met de 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 in 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 netwerkproblemen. |