Solucionando problemas de conectividade do SQL após a migração do banco de dados

6

Concluímos uma migração do SQL 2000 para o SQL 2008 R2 e começamos a receber intermitentemente SqlExceptions com as duas mensagens de erro a seguir:

  • Ocorreu um erro de nível de transporte ao receber os resultados do servidor. (provedor: TCP Provider, error: 0 - O período de tempo limite do semáforo expirou.)
  • Ocorreu um erro de nível de transporte ao receber os resultados do servidor. (provedor: TCP Provider, error: 0 - O período de tempo limite do semáforo expirou.)

Temos 3 servidores da web conectados a este SQL Server, executando cerca de 100 aplicativos (todos acessando os mesmos 8 bancos de dados no SQL Server).

Como essas exceções não estavam ocorrendo no servidor 2000, achamos que é improvável que seja um problema de aplicativo (no entanto, não descartamos isso). O tráfego nos sites da Web é típico, descartando um problema de alto tráfego. A antiga caixa do SQL 2000 tinha 4 CPUs e 8 GB de RAM, enquanto a nova tinha 24 GB de RAM e 16 CPUs (o que é atualmente e durante o problema subutilizado).

Estes erros ocorreram durante um período de cerca de 5 minutos há várias horas e ainda não foram alterados novamente.

A exibição do sistema sys.dm_os_ring_buffers não mostra entradas para essas desconexões e não há entradas de log de eventos correspondentes no servidor ou no cliente.

Alguns googling encontraram alguns relatórios semelhantes, mas nada parece definitivo (veja os links abaixo). Alguém viu erros como este após a migração do SQL 2000 para o SQL 2008 R2?

Links:

por Chris Shaffer 12.10.2010 / 19:36

4 respostas

3

Nós rastreamos e corrigimos esse problema em nosso ambiente. A descrição que entendi está abaixo (por favor, desculpe possíveis imprecisões abaixo; é assim que eu (como desenvolvedor de software) entendo as descrições que me foram dadas pelo nosso administrador de rede (que também estava trabalhando com nossa empresa de hospedagem).

A causa foi eventualmente rastreada como um problema de configuração de rede envolvendo o Load Balancer. Nós esperávamos que o Load Balancer estivesse entre a internet e nossos servidores web, e que todos os nossos servidores estivessem se comunicando livremente uns com os outros. Infelizmente, a rede foi configurada de forma que todo o tráfego de rede (incluindo o tráfego entre os Servidores SQL e os Servidores Web) estivesse passando pelo Balanceador de Carga. O Load Balancer foi configurado para limitar a largura de banda que passa por ele e, quando o limite foi excedido, ele simplesmente descartou os pacotes. O limite geralmente era excedido quando grandes transferências de arquivos ocorriam entre os servidores (por exemplo, quando backups de bancos de dados eram copiados do servidor de banco de dados, etc.). Isso era difícil para nós, pois não tínhamos acesso ao Load Balancer (somente nosso provedor de hospedagem podia acessá-lo) e, até onde pudemos perceber, estávamos longe de saturar nossas interfaces de rede. Além disso, esses problemas eram extremamente esporádicos (da ordem de alguns minutos a cada 3-5 meses).

A correção foi reorganizar o ambiente para que o tráfego da rede interna não passasse pelo LB; Acredito que a rede foi reorganizada para se adequar a uma arquitetura de balanceamento de carga com um braço. Desde que fizemos essa alteração, não tivemos problemas de conectividade intermitente.

    
por 16.05.2012 / 15:06
0

Se eu estiver entendendo corretamente, você não apenas alterou o software, mas também o hardware. Por isso, há muitas alterações que podem estar causando esse erro de conexão. Eu vi muitas recomendações para verificar seus drivers de placa de rede e firmware da placa-mãe (!!) para corrigir isso. Yikes!

De qualquer forma - você deve conseguir ver esse erro no log do aplicativo do servidor. A partir daqui, você poderá obter uma ideia da data / hora em que a exceção ocorreu para poder compará-la ao evento de cliente / aplicativo individual para restringir o que está acontecendo quando essa exceção aparecer.

Você também pode usar o Netmon para rastrear as conexões dos clientes para o servidor. Você vai querer dar um par de dias para reproduzir o erro. Isso deve reduzi-lo um pouco e, pelo menos, dar-lhe uma ideia do que está falhando.

    
por 12.10.2010 / 22:18
0

A última vez que vi "O período de tempo limite do semáforo expirou" foi quando tentei copiar arquivos de um disco rígido para outro no Windows Server 2008. Parecia ser devido a um disco rígido fragmentado com clusters defeituosos. Western Digital 2TB caviar Green, a propósito, não em RAID.

    
por 16.05.2012 / 13:07
0

Já faz um tempo, mas eu queria adicionar meus dois centavos também. No nosso caso, o servidor SQL em questão está em uma rede diferente com um firewall no meio, então o IPS entrou em jogo. Ele funcionou durante anos, mas, evidentemente, apenas nesta semana o IPS recebeu uma nova versão de uma assinatura de detecção antiga, que se referia a "Vulnerabilidade de saturação de buffer do Microsoft SQL de ataque:". Assim, começou a bloquear as tentativas de conexão pela porta 1433.

    
por 03.03.2017 / 20:21