Mensajes expirados de tiempo de espera al conectarse a SQL Server

Se aplica a:   SQL Server

Nota

Antes de empezar a solucionar problemas, compruebe los requisitos previos y revise la lista de comprobación.

Un error de tiempo de espera significa que cierta operación tarda más de lo necesario. La aplicación cliente detiene la operación (en lugar de esperar indefinidamente), lo que puede bloquear otras operaciones y suspender una aplicación. En este artículo se proporcionan resoluciones de los errores de tiempo de espera de comando y tiempo de espera de conexión al conectarse a SQL Server.

Comprobar errores expirados de tiempo de espera

Cuando encuentre problemas de tiempo de espera expirado, recibirá uno o varios de los siguientes mensajes de error:

  • Tiempo de espera expirado. El período de tiempo de espera transcurrido antes de finalizar la operación o el servidor no responde.

  • System.Data.SqlClient.SqlException (0x80131904): El tiempo de espera de conexión expiró. El período de tiempo de espera transcurrido al intentar consumir la confirmación del protocolo de enlace previo al inicio de sesión. Esto podría deberse a que se ha fallado el protocolo de enlace previo al inicio de sesión o a que el servidor no ha podido responder en el tiempo. La duración que se pasó al intentar conectarse a este servidor fue [Inicio de sesión previo] =23; handshake=14979;
    System.ComponentModel.Win32Exception (0x80004005): la operación de espera ha pasado el tiempo de espera.

  • System.Data.SqlClient.SqlException (0x80131904): El tiempo de espera expiró. El período de tiempo de espera transcurrido antes de finalizar la operación o el servidor no responde. System.ComponentModel.Win32Exception (0x80004005): la operación de espera ha pasado el tiempo de espera.

  • Tiempo de espera de conexión expirado. El período de tiempo de espera transcurrido al intentar consumir la confirmación del protocolo de enlace previo al inicio de sesión. Esto podría deberse a que se ha fallado el protocolo de enlace previo al inicio de sesión o a que el servidor no ha podido responder en el tiempo.
    La duración que se pasó al intentar conectarse a este servidor fue [Inicio de sesión previo] initialization=21036; handshake=0; (Microsoft SQL Server, Error: -2).

  • System.InvalidOperationException: el tiempo de espera expiró. El período de tiempo de espera transcurrido antes de obtener una conexión del grupo.

    Si las conexiones no se cierran correctamente, puede producirse el error. Esto se debe a que todas las conexiones agrupadas estaban en uso y se alcanzó el tamaño máximo del grupo. El error se puede evitar si sigue los pasos descritos en el artículo agotado del grupo de conexiones.

Nota

El segundo y el tercer error se producen .NET Framework se instala la versión 4.5 o una versión posterior.

Determinar el tipo de errores expirados de tiempo de espera

Desde el punto de vista de la conectividad, se encuentran los siguientes problemas de tiempo de espera:

  • Tiempo de espera de conexión (15 segundos de forma predeterminada)
  • Tiempo de espera de consulta o comando (30 segundos de forma predeterminada)

Nota

Los valores predeterminados se pueden establecer a través del código, conectando cadena u otros métodos.

Antes de solucionar problemas, vea la pila de llamadas completa de los mensajes de error para determinar el tipo de error.

  • Vea el siguiente ejemplo de una pila de llamadas de un tiempo de espera de conexión:

    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 indica que el cliente está intentando abrir una conexión. Por lo tanto, esto no está relacionado con una consulta.

  • Vea el siguiente ejemplo de una pila de llamadas de una consulta o tiempo de espera de comandos:

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

    La SqlCommand clase se usa para trabajar con una consulta, no con una conexión. El ExecuteScalar método se usa para ejecutar una consulta. También puede ver otros elementos, como un o ExecuteReader ExecuteNonQuery.

Solucionar errores expirados de tiempo de espera

  • Si se produce un error de consulta o de tiempo de espera de comandos, consulte Troubleshoot query time-out errors.

  • Si se produce un error de tiempo de espera de conexión, siga estos pasos:

    1. Aumente el parámetro connection-timeout.

      • Si usa una aplicación para conectarse a SQL Server, aumente los valores de parámetro de tiempo de espera de conexión relevantes y compruebe si la conexión finalmente se realiza correctamente. Por ejemplo, si usa System.Data.Sqlcient, establezca la propiedad SqlConnection.ConnectionTimeout en 30 o un valor superior.

        Nota

        Si usa otros proveedores, compruebe Página principal para SQL programación de cliente.

      • Si usa SQL Server Management Studio (SSMS), seleccione la pestaña Propiedades de conexión en el cuadro de diálogo Conectar al servidor y establezca La configuración de tiempo de espera de conexión en un valor superior.

    2. Si la conexión finalmente se realiza correctamente, se trata de un problema de red. Debe trabajar con el administrador de red para resolver el problema. Una vez resuelto, puede volver a la configuración predeterminada de la aplicación.

      Nota

      Aumentar el tiempo de espera de conexión en la aplicación es un método posible, pero no es una resolución a largo plazo. Esto se debe a que la conexión se produce rápidamente (normalmente en unos milisegundos) al intentar conectarse a un origen de datos.

Causas y resoluciones típicas del error

En la tabla siguiente se enumeran las causas típicas y las resoluciones de los errores expirados de tiempo de espera. Para obtener más sugerencias y sugerencias, consulte Troubleshooting: Timeout Expired.

Causas típicas Soluciones
El nombre del servidor se presentó incorrectamente. Inténtelo de nuevo con el nombre de servidor correcto.
El SQL Server en el servidor no se está ejecutando. Inicie la instancia del SQL Server Motor de base de datos.
El puerto TCP/IP de la Motor de base de datos está bloqueado por un firewall. Configure el firewall para permitir el acceso a la Motor de base de datos.
El Motor de base de datos no escucha en el puerto 1433. Esto se debe a que el puerto se ha cambiado o no es la instancia predeterminada y el servicio SQL Server browser no se está ejecutando. Inicie el servicio SQL Server explorador o especifique un número de puerto TCP/IP para conectarse con el Sqlcmd -S <ip_addres>,<port> comando. En el registro de errores, busque el número de puerto SQL Server está escuchando.
El servicio SQL Server explorador está en ejecución, pero el puerto UDP 1434 está bloqueado por un firewall. Configure el firewall para permitir el acceso al puerto UPD 1434 en el servidor o especifique el número de puerto TCP/IP para conectarse.
El cliente y el servidor no están configurados para usar el mismo protocolo de red. Asegúrese de que tanto el servidor como los equipos cliente tienen al menos un protocolo habilitado en común mediante el uso de Administrador de configuración de SQL Server. Por ejemplo, si el cliente se conecta mediante sockets TCP/IP pero SQL Server escucha solo en canalizaciones con nombre, no se puede establecer ninguna conectividad.
La red no puede resolver el nombre del servidor en una dirección IP. Esto se puede probar mediante los programas ping o telnet. Se soluciona el problema de resolución de nombres de equipo en la red o se conecta al servidor mediante la dirección IP. Este no es un SQL Server problema. Para obtener ayuda, consulte la documentación Windows o póngase en contacto con el administrador de red. Use el siguiente comando para probar la conectividad:
telnet <ServerName> [<Port>]
telnet <IP_Address> <Port>
Si el uso de una dirección IP funciona, pero el nombre del servidor no funciona, es un problema de resolución de nombres.
La red no se puede conectar mediante la dirección IP. Esto se puede probar mediante el programa ping, telnet o tracert . Se soluciona el problema TCP/IP en la red. Este no es un SQL Server problema. Para obtener ayuda, consulte la documentación Windows o póngase en contacto con el administrador de red.
Para obtener una solución de problemas de red más avanzada, vea 0300 Intermittent or Periodic Network Issue.

Consulte también