Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op: SQL Server
Overzicht
Een time-outfout in SQL Server betekent dat een verbindings- of opdrachtbewerking niet is voltooid binnen het time-outinterval dat de clienttoepassing toestaat, zodat de client de bewerking heeft geannuleerd in plaats van voor onbepaalde tijd te wachten. Dit artikel helpt u te bepalen of u een verbindingstime-out of een time-out voor een query of opdracht bereikt. Het behandelt de foutberichten die kunnen optreden met een verbindingstime-out en de typische service, poort, firewall en naamomzetting veroorzaakt achter time-outs van verbindingen. Gebruik dit artikel wanneer een clienttoepassing af en toe of consistent geen verbinding kan maken met een SQL Server exemplaar met time-outfouten voor verbindingen.
Zie Time-outfouten voor query's of opdrachten oplossen door time-outfouten voor query's op te lossen.
Notitie
Voordat u begint met het oplossen van problemen, controleert u de vereisten en doorloopt u de controlelijst.
Foutberichten over verlopen time-outs bij het maken van verbinding met SQL Server
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 . Zie SQL Server verbindingspooling (ADO.NET) voor meer informatie over hoe pooling werkt.
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 opgetreden
Er zijn twee soorten time-outproblemen die vaak worden waargenomen bij databasetoepassingen:
- Time-out voor verbinding (standaard 15 seconden)
- Time-out voor query's of opdrachten (standaard 30 seconden)
Deze twee problemen zijn zeer verschillend van aard omdat ze afkomstig zijn van verschillende bronnen en zich voordoen in afzonderlijke onafhankelijke fasen van een interactie met een databasetoepassing. Er treedt een verbindingstime-out op wanneer een initiële verbinding met de database-engine mislukt. Een time-out voor query's of opdrachten vindt daarentegen veel later plaats in de levensduur van een toepassingsinteractie met een databaseserver. De initiële verbinding is voltooid, maar het duurt lang voordat een query die u hebt ingediend bij de databaseserver is voltooid.
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.Opengeeft 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
SqlCommandklasse wordt gebruikt om met een query te werken, niet met een verbinding. DeExecuteScalarmethode wordt gebruikt om een query uit te voeren. U kunt ook andere items zien, zoals eenExecuteReaderofExecuteNonQuery.Als er een time-outfout voor query's of opdrachten optreedt, raadpleegt u Time-outfouten voor query's oplossen.
Time-outfouten voor verbindingen in SQL Server oplossen
Als er een time-outfout voor de verbinding optreedt, voert u de volgende stappen uit:
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. Als u de huidige Microsoft gebruikt. Data.SqlClient-stuurprogramma stelt de equivalente eigenschap SqlConnection.ConnectionTimeout in.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. Neem contact op 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.
Service-, poort- en protocoloorzaken van verbindingstime-outfouten
De volgende tabel bevat SQL Server oorzaken van verlopen time-outfouten SQL Server service- en poort- en netwerkprotocollen en hoe u deze kunt oplossen. Zie Probleemoplossing: Time-out verlopen voor meer tips en suggesties.
| Typische oorzaken | Oplossingen |
|---|---|
| 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. Zie Een server configureren om te luisteren op een specifieke TCP-poort voor meer informatie. |
| 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 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 benoemde pijpen, kan er geen verbinding tot stand worden gebracht. |
Netwerk- en naamomzettingsoorzaken van verbindingstime-outfouten
De volgende tabel bevat oorzaken van verlopen time-outfouten op netwerkniveau, zoals DNS-naamomzettingsfouten en TCP/IP-routeringsproblemen en het oplossen van elk probleem.
| Typische oorzaken | Oplossingen |
|---|---|
| Servernaam is onjuist getypt. | Probeer het opnieuw met de juiste servernaam. |
| De servernaam kan niet worden omgezet in een IP-adres. Test dit probleem met behulp van de ping- of telnet-programma's. | Los het probleem met de computernaamomzetting op uw netwerk op of maak verbinding met de server met behulp van het IP-adres. Dit probleem is geen SQL Server probleem. 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. Test dit probleem met behulp van het ping-, telnet- of tracert-programma . | Los het TCP/IP-probleem op in uw netwerk. Dit probleem 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. |
Verwante onderwerpen
- Verbindingsproblemen in SQL Server oplossen
- Oplossen van query time-outfouten
- Er is een netwerkgerelateerde of instantiespecifieke fout opgetreden tijdens het tot stand brengen van een verbinding met SQL Server
- Gegevens verzamelen om verbindingsproblemen met SQL Server op te lossen
- Onregelmatig of periodiek netwerkprobleem
- Microsoft ADO.NET voor SQL Server