Compartir a través de


Tiempo de espera expirado de mensajes al conectarse a SQL Server

Se aplica a: SQL Server

Nota:

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

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

Comprobación de 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 agotado. El tiempo de espera transcurrió antes de que se completase la operación, o bien el servidor no responde.

  • System.Data.SqlClient.SqlException (0x80131904): tiempo de espera de conexión expirado. El período de tiempo de espera transcurrió al intentar consumir la confirmación del protocolo de enlace previo al inicio de sesión. Esto podría deberse a un error en el protocolo de enlace previo al inicio de sesión o a que el servidor no pudo responder a tiempo. El tiempo invertido al intentar conectarse a este servidor fue: [Previo al inicio de sesión] inicialización=23; protocolo de enlace=14979;
    System.ComponentModel.Win32Exception (0x80004005): se agotó el tiempo de espera de la operación wait.

  • System.Data.SqlClient.SqlException (0x80131904): tiempo de espera expirado. El tiempo de espera transcurrió antes de que se completase la operación, o bien el servidor no responde. System.ComponentModel.Win32Exception (0x80004005): se agotó el tiempo de espera de la operación wait.

  • Tiempo de espera de conexión agotado. El período de tiempo de espera transcurrió al intentar consumir la confirmación del protocolo de enlace previo al inicio de sesión. Esto podría deberse a un error en el protocolo de enlace previo al inicio de sesión o a que el servidor no pudo responder a tiempo.
    La duración gastada al intentar conectarse a este servidor era [Inicio de sesión previo] inicialización=21036; handshake=0; (Microsoft SQL Server, Error: -2).

  • System.InvalidOperationException: tiempo de espera expirado. Tiempo de espera transcurrido antes de obtener una conexión del grupo.

    Si las conexiones no se cierran correctamente, pueden producirse errores. Estos errores se producen porque se usan todas las conexiones agrupadas y se alcanza el tamaño máximo del grupo. Puede evitar estos errores si sigue los pasos descritos en el artículo sobre el grupo de conexiones agotado.

Nota:

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

Determinar el tipo de errores expirados de tiempo de espera expirado

Desde una perspectiva de conectividad, se producen 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 mediante código, cadena de conexión 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.

  • Consulte el ejemplo siguiente 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 y, por tanto, no está relacionado con una consulta.

  • Consulte el ejemplo siguiente de una pila de llamadas de un tiempo de espera de consulta o comando:

    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 o ExecuteReader ExecuteNonQuery.

Solución de errores expirados de tiempo de espera

  • Si encuentra un error de consulta o de tiempo de espera de comando, consulte Solución de errores de tiempo de espera de consulta.

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

    1. Aumente el parámetro connection-timeout.

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

        Nota:

        Si usa otros proveedores, consulte Página principal para la programación del cliente SQL.

      • 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 Tiempo de espera de conexión en un valor superior.

    2. Si la conexión 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 revertir a la configuración predeterminada en 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 pocos milisegundos) cuando intenta conectarse a un origen de datos.

Causas típicas y resoluciones 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 Solución de problemas: Tiempo de espera expirado.

Causas típicas Resoluciones
El nombre del servidor se ha escrito incorrectamente. Inténtelo de nuevo con el nombre de servidor correcto.
El servicio SQL Server en el servidor no se está ejecutando. Inicie la instancia del Motor de base de datos de SQL Server.
Un firewall bloquea el puerto TCP/IP de la instancia de Motor de base de datos. 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 se cambia el puerto o no es la instancia predeterminada y el servicio SQL Server Browser no se está ejecutando. Inicie el servicio SQL Server Browser 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 en el que ESTÁ escuchando SQL Server.
El servicio SQL Server Browser se está ejecutando, pero un firewall bloquea el puerto UDP 1434. Configure el firewall para permitir el acceso al puerto UPD 1434 en el servidor o especifique el número de puerto TCP/IP que se va a conectar.
El cliente y el servidor no están configurados para usar el mismo protocolo de red. Asegúrese de que los equipos cliente y servidor tengan al menos un protocolo habilitado en común mediante Administrador de configuración de SQL Server. Por ejemplo, si el cliente se conecta mediante sockets TCP/IP, pero SQL Server solo escucha 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 de ping o telnet. Corrija el problema de resolución de nombres de equipo en la red o conéctese al servidor mediante la dirección IP; esto no es un problema de SQL Server. Para obtener ayuda, consulte la documentación de 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, se trata de 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 . Corrija el problema de TCP/IP en la red: este no es un problema de SQL Server. Para obtener ayuda, consulte la documentación de Windows o póngase en contacto con el administrador de red.
Para obtener una solución de problemas de red más avanzada, consulte 0300 Problemas de red intermitentes o periódicos.

Consulte también