Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a: SQL Server
Resumo
Um erro "Tempo limite expirado" em SQL Server significa que uma conexão ou operação de comando não foi concluída dentro do intervalo de tempo limite que o aplicativo cliente permite, portanto, o cliente cancelou a operação em vez de aguardar indefinidamente. Este artigo ajuda você a identificar se você está atingindo um tempo limite de conexão ou um tempo limite de consulta ou comando. Ele aborda as mensagens de erro que você pode encontrar com um tempo limite de conexão e o serviço típico, a porta, o firewall e a resolução de nomes causam tempos limite de conexão. Use este artigo quando um aplicativo cliente falha intermitente ou consistentemente ao se conectar a uma instância de SQL Server com erros de tempo limite de conexão.
Para solucionar problemas de erros de tempo limite de consulta ou comando, consulte Solucionar problemas de erros de tempo limite de consulta.
Observação
Antes de iniciar a solução de problemas, verifique os pré-requisitos e percorra a lista de verificação.
Mensagens de erro expiradas de tempo limite ao se conectar ao SQL Server
Quando você encontra problemas de "tempo limite expirado", recebe uma ou mais das seguintes mensagens de erro:
-
O tempo limite expirou. O tempo limite acabou antes da conclusão da operação ou o servidor não está respondendo.
-
System.Data.SqlClient.SqlException (0x80131904): Tempo limite de conexão expirado. O tempo limite expirou ao tentar consumir a confirmação de handshake de pré-logon. Isso pode ocorrer porque o handshake de pré-logon falhou ou o servidor não pôde responder a tempo. A duração da tentativa de conexão com este servidor foi [Pre-Login] initialization=23; handshake=14979;
System.ComponentModel.Win32Exception (0x80004005): a operação de espera atingiu o tempo limite. -
System.Data.SqlClient.SqlException (0x80131904): Tempo limite expirado. O tempo limite acabou antes da conclusão da operação ou o servidor não está respondendo. System.ComponentModel.Win32Exception (0x80004005): a operação de espera atingiu o tempo limite.
-
O tempo limite da conexão expirou. O tempo limite expirou ao tentar consumir a confirmação de handshake de pré-logon. Isso pode ocorrer porque o handshake de pré-logon falhou ou o servidor não pôde responder a tempo.
A duração gasta ao tentar se conectar a este servidor foi [Pré-login] inicialização = 21036; aperto de mão = 0; (Microsoft SQL Server, Erro: -2). -
System.InvalidOperationException: Tempo limite expirado. O período de tempo limite foi atingido antes de obter uma conexão do pool.
Se as conexões não forem fechadas corretamente, poderão ocorrer erros. Esses erros ocorrem porque todas as conexões em pool estão em uso e o tamanho máximo do pool é atingido. Você pode evitar esses erros se seguir as etapas descritas no artigo esgotado do pool de conexões. Para obter mais informações sobre como o pool funciona, consulte SQL Server pooling de conexões (ADO.NET).
Observação
O segundo e o terceiro erros ocorrem quando .NET Framework 4.5 ou uma versão posterior é instalada.
Determinar qual tipo de tempo limite ocorreu
Há dois tipos de problemas de tempo limite normalmente observados com aplicativos de banco de dados:
- Tempo limite de conexão (15 segundos por padrão)
- Tempo limite de consulta ou comando (30 segundos por padrão)
Esses dois problemas são muito diferentes por natureza, pois vêm de fontes diferentes e ocorrem em fases independentes separadas de uma interação de aplicativo de banco de dados. Um tempo limite de conexão ocorre quando uma conexão inicial com o mecanismo de banco de dados falha. Um tempo limite de consulta ou comando, por outro lado, ocorre muito mais tarde na vida útil de uma interação de aplicativo com um servidor de banco de dados. A conexão inicial foi concluída com êxito, mas uma consulta enviada ao servidor de banco de dados está demorando muito para ser concluída.
Antes de solucionar problemas, exiba a pilha de chamadas completa das mensagens de erro para determinar o tipo de erro.
Veja o exemplo a seguir de uma pilha de chamadas de um tempo limite de conexão:
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.Openindica que o cliente está tentando abrir uma conexão e, portanto, não está relacionado a uma consulta.Veja o exemplo a seguir de uma pilha de chamadas de um tempo limite de consulta ou 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()A
SqlCommandclasse é usada para trabalhar com uma consulta, não com uma conexão. OExecuteScalarmétodo é usado para executar uma consulta. Você também pode ver outros itens, como umExecuteReaderouExecuteNonQuery.Se você encontrar um erro de tempo limite de consulta ou comando, confira Solucionar problemas de erros de tempo limite de consulta.
Solucionar problemas de erros de tempo limite de conexão no SQL Server
Se você encontrar um erro de tempo limite de conexão, siga estas etapas:
Aumente o parâmetro de tempo limite da conexão.
Se você usar um aplicativo para se conectar ao SQL Server, aumente os valores de parâmetro de tempo limite de conexão relevantes e verifique se a conexão eventualmente será bem-sucedida. Por exemplo, se você usar
System.Data.SqlClient, defina a propriedade SqlConnection.ConnectionTimeout como 30 ou um valor superior. Se você usar o Microsoft atual. Driver Data.SqlClient, defina a propriedade SqlConnection.ConnectionTimeout equivalente.Observação
Se você usar outros provedores, verifique a página inicial da programação do cliente SQL.
Se você usar o SSMS (SQL Server Management Studio), selecione a guia Propriedades da Conexão na caixa de diálogo Conectar ao Servidor e defina a configuração de Tempo limite da conexão como um valor mais alto.
Se a conexão for bem-sucedida, é um problema de rede. Trabalhe com o administrador de rede para resolver o problema. Depois que ele for resolvido, você poderá reverter para as configurações padrão em seu aplicativo.
Observação
Aumentar o tempo limite de conexão no aplicativo é um método possível, mas não é uma resolução de longo prazo. Isso ocorre porque a conexão ocorre rapidamente (geralmente em alguns milissegundos) quando você tenta se conectar a uma fonte de dados.
Causas de serviço, porta e protocolo de erros de tempo limite de conexão
A tabela a seguir lista SQL Server causas de serviço, porta e protocolo de rede de erros expirados de tempo limite e como resolver cada um deles. Para obter mais dicas e sugestões, consulte Solução de problemas: Tempo limite expirado.
| Causas típicas | Resoluções |
|---|---|
| O serviço SQL Server no servidor não está em execução. | Inicie a instância do Mecanismo de Banco de Dados do SQL Server. |
| A porta TCP/IP da instância do Mecanismo de Banco de Dados está bloqueada por um firewall. | Configure o firewall para permitir o acesso ao Mecanismo de Banco de Dados. |
| O Mecanismo de Banco de Dados não está escutando na porta 1433. Isso ocorre porque a porta foi alterada ou não é a instância padrão e o serviço Navegador do SQL Server não está em execução. | Inicie o serviço Navegador do SQL Server ou especifique um número de porta TCP/IP para se conectar ao Sqlcmd -S <ip_addres>,<port> comando. No log de erros, localize o número da porta que o SQL Server está escutando. Para obter mais informações, consulte Configurar um servidor para escutar em uma porta TCP específica. |
| O serviço Navegador do SQL Server está em execução, mas a porta UDP 1434 está bloqueada por um firewall. | Configure o firewall para permitir o acesso à porta UPD 1434 no servidor ou especifique o número da porta TCP/IP a ser conectada. |
| O cliente e o servidor não estão configurados para usar o mesmo protocolo de rede. | Verifique se o servidor e os computadores cliente têm pelo menos um protocolo habilitado em comum usando SQL Server Configuration Manager. Por exemplo, se o cliente estiver se conectando usando soquetes TCP/IP, mas o SQL Server estiver escutando apenas em pipes nomeados, nenhuma conectividade poderá ser estabelecida. |
Causas de resolução de nome e rede de erros de tempo limite de conexão
A tabela a seguir lista as causas em nível de rede de erros expirados de tempo limite, como falhas de resolução de nomes DNS e problemas de roteamento TCP/IP e como resolver cada um deles.
| Causas típicas | Resoluções |
|---|---|
| O nome do servidor foi digitado incorretamente. | Tente novamente com o nome do servidor correto. |
| A rede não pode resolver o nome do servidor para um endereço IP. Teste esse problema usando os programas ping ou telnet. | Corrija o problema de resolução de nome do computador em sua rede ou conecte-se ao servidor usando o endereço IP. Esse problema não é um problema SQL Server. Para obter assistência, consulte a documentação do Windows ou entre em contato com o administrador da rede. Use o seguinte comando para testar a conectividade:telnet <ServerName> [<Port>]telnet <IP_Address> <Port> Se o uso de um endereço IP funcionar, mas o nome do servidor não funcionar, é um problema de resolução de nomes. |
| A rede não pode se conectar usando o endereço IP. Teste esse problema usando o programa ping, telnet ou tracert . | Corrija o problema de TCP/IP em sua rede. Esse problema não é um problema SQL Server. Para obter assistência, consulte a documentação do Windows ou entre em contato com o administrador da rede. Para obter uma solução de problemas de rede mais avançada, consulte 0300 Problema de rede intermitente ou periódico. |
Conteúdo relacionado
- Solucionar problemas de conectividade no SQL Server
- Solucionar erros de tempo de espera em consultas
- Ocorreu um erro de rede ou específico à instância ao estabelecer uma conexão com o SQL Server
- Coletar dados para solucionar problemas de conectividade do SQL Server
- Problema de rede intermitente ou periódica
- Microsoft ADO.NET para SQL Server