Share via


Meddelande om att tidsgränsen har upphört att gälla vid anslutning till SQL Server

Gäller för: SQL Server

Obs!

Innan du börjar felsöka kontrollerar du förutsättningarna och går igenom checklistan.

Ett fel där tidsgränsen har upphört att gälla innebär att en viss åtgärd tar längre tid än nödvändigt. Klientprogrammet stoppar åtgärden (i stället för att vänta på obestämd tid), vilket kan blockera andra åtgärder och pausa ett program. Den här artikeln innehåller lösningar för fel där "kommando för tidsgräns har upphört att gälla" och "tidsgräns har upphört att gälla vid anslutning" som du får när du ansluter till SQL Server.

Kontrollera fel där tidsgränsen har upphört att gälla

När du får problem med "tidsgränsen har upphört att gälla" får du ett eller flera av följande felmeddelanden:

  • Tidsgränsen har upphört att gälla. Tidsgränsen nåddes innan åtgärden slutfördes, eller så svarar inte servern.

  • System.Data.SqlClient.SqlException (0x80131904): Tidsgränsen för anslutningen har upphört att gälla. Tidsgränsen uppnåddes vid försök att använda handskakningsbekräftelse före inloggning. Det kan bero på att handskakningen före inloggningen misslyckades eller att servern inte kunde svara bakåt i tiden. Varaktigheten för att försöka ansluta till den här servern var [Pre-Login] initiering=23. Handskakning=14979.
    System.ComponentModel.Win32Exception (0x80004005): vänteåtgärden nådde sin tidsgräns.

  • System.Data.SqlClient.SqlException (0x80131904): Tidsgränsen upphörde att gälla. Tidsgränsen nåddes innan åtgärden slutfördes, eller så svarar inte servern. System.ComponentModel.Win32Exception (0x80004005): vänteåtgärden nådde sin tidsgräns.

  • Tidsgränsen för inloggning har upphört att gälla. Tidsgränsen uppnåddes vid försök att använda handskakningsbekräftelse före inloggning. Det kan bero på att handskakningen före inloggningen misslyckades eller att servern inte kunde svara bakåt i tiden.
    Varaktigheten för att försöka ansluta till den här servern var [Pre-Login] initialization=21036; handshake=0; (Microsoft SQL Server, Fel: -2).

  • System.InvalidOperationException: Tidsgränsen har upphört att gälla. Tidsgränsen uppnåddes innan en anslutning hämtades från poolen.

    Om anslutningarna inte stängs korrekt kan fel uppstå. De här felen uppstår eftersom alla poolanslutningar används och den maximala poolstorleken nås. Du kan undvika dessa fel om du följer stegen som beskrivs i artikeln förbrukad anslutningspool.

Obs!

Det andra och det tredje felet uppstår när .NET Framework 4.5 eller en senare version installeras.

Fastställa vilken typ av fel där tidsgränsen har upphört att gälla

Ur ett anslutningsperspektiv uppstår följande problem där tidsgränsen upphört att gälla:

  • Tidsgräns för anslutning (15 sekunder som standard)
  • Tidsgräns för frågor eller kommandon (30 sekunder som standard)

Obs!

Standardvärdena kan anges via kod, anslutningssträng eller andra metoder.

Innan du felsöker kan du visa den fullständiga anropsstacken för felmeddelandena för att fastställa feltypen.

  • Se följande exempel på en anropsstack med en tidsgräns för anslutning:

    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 anger att klienten försöker öppna en anslutning och därför inte är relaterad till en fråga.

  • Se följande exempel på en anropsstack för en fråga eller kommandots tidsgräns:

    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()
    

    Klassen SqlCommand används för att arbeta med en fråga, inte en anslutning. Metoden ExecuteScalar används för att köra en fråga. Du kan också se andra objekt, till exempel en ExecuteReader eller ExecuteNonQuery.

Felsöka fel där tidsgränsen har upphört att gälla

  • Om du stöter på ett fel där fråge- eller kommando-tidsgränsen har upphört att gälla läser du Felsöka fel där tidsgränsen har upphört att gälla för frågor.

  • Om du stöter på ett fel där tidsgränsen har upphört att gälla för anslutning följer du stegen:

    1. Öka parametern för anslutningstidsgräns.

      • Om du använder ett program för att ansluta till SQL Server ökar du de relevanta parametervärdena för anslutningstidsgräns och kontrollerar om anslutningen lyckas. Om du till exempel använder System.Data.SqlClient, anger du egenskapen SqlConnection.ConnectionTimeout till 30 eller ett högre värde.

        Obs!

        Om du använder andra leverantörer kontrollerar du Startsidan för SQL-klientprogrammering.

      • Om du använder SQL Server Management Studio (SSMS) väljer du fliken Anslutningsegenskaper i dialogrutan Anslut till server och anger inställningen för anslutningstidsgräns till ett högre värde.

    2. Om anslutningen lyckas så småningom är det ett nätverksproblem. Du måste kontakta nätverksadministratören för att lösa problemet. När det har lösts kan du återgå till standardinställningarna i ditt program.

      Obs!

      Att öka tidsgränsen för anslutningen i programmet är en möjlig metod, men det är inte en långsiktig lösning. Det beror på att anslutningen sker snabbt (vanligtvis inom några millisekunder) när du försöker ansluta till en datakälla.

Vanliga orsaker och lösningar för felet

I följande tabell visas vanliga orsaker och lösningar för fel där tidsgräns har upphört att gälla. Fler tips och förslag finns i Felsökning: Tidsgränsen har upphört att gälla.

Vanliga orsaker Åtgärder
Servernamnet har skrivits felaktigt. Försök igen med rätt servernamn.
Tjänsten SQL Server på servern körs inte. Starta databasmotorinstansen av SQL Server.
TCP/IP-porten för databasmotorinstansen blockeras av en brandvägg. Konfigurera brandväggen för att tillåta åtkomst till databasmotorn.
Databasmotorn lyssnar inte på port 1433. Det beror på att porten har ändrats eller att den inte är standardinstansen och att tjänsten SQL Server Browser inte körs. Starta tjänsten SQL Server Browser eller ange ett TCP/IP-portnummer för att ansluta med kommandot Sqlcmd -S <ip_addres>,<port>. Leta reda på portnumret som SQL Server lyssnar på i felloggen.
Tjänsten SQL Server Browser körs men UDP-port 1434 blockeras av en brandvägg. Konfigurera brandväggen för att tillåta åtkomst till UPD-port 1434 på servern eller ange TCP/IP-portnumret för att ansluta.
Klienten och servern är inte konfigurerade att använda samma nätverksprotokoll. Kontrollera att servern och klientdatorerna har minst ett aktiverat protokoll gemensamt med hjälp av Konfigurationshanteraren för SQL Server. Om klienten till exempel ansluter med TCP/IP-sockets men SQL Server bara lyssnar på namngivna pipes kan ingen anslutning upprättas.
Nätverket kan inte matcha servernamnet till en IP-adress – detta kan testas med hjälp av ping- eller telnet-programmen. Åtgärda problemet med datorns namnmatchning i nätverket eller anslut till servern med hjälp av IP-adressen – det här är inte ett SQL Server-problem. Om du vill ha hjälp kan du läsa Windows-dokumentationen eller kontakta nätverksadministratören. Använd följande kommando för att testa anslutningen:
telnet <ServerName> [<Port>]
telnet <IP_Address> <Port>
Om det fungerar att använda en IP-adress, men servernamnet inte fungerar, är det ett problem med namnmatchningen.
Nätverket kan inte ansluta med hjälp av IP-adressen – detta kan testas med hjälp av ping-, telnet- eller tracert-programmet. Åtgärda TCP/IP-problemet i nätverket – det här är inte ett SQL Server-problem. Om du vill ha hjälp kan du läsa Windows-dokumentationen eller kontakta nätverksadministratören.
Mer avancerad nätverksfelsökning finns i 0300 Tillfälligt eller periodiskt nätverksproblem.

Se även