Problemas de conexão esporádica conectando-se ao SQL 2005 - Pipes nomeados versus problema de TCP / IP?

3

Temos um site de produção que está experimentando erros de conexão periódica em nosso servidor SQL 2005, várias vezes ao dia durante o pico de uso:

An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

Nós certamente estamos investigando outros caminhos, mas até agora não vimos nada fora do comum no lado do SQL. Estamos nos perguntando se isso pode ser um problema de pipes nomeados ou se veríamos a mesma coisa se forçássemos o servidor da Web a usar o TCP / IP. Então minhas perguntas são:

  • Alguém viu um problema como esse? A maior parte da pesquisa que faço sobre esse erro é para pessoas que não conseguem falar com o servidor SQL de todo porque a configuração da área de superfície está desarrumada. Essa não é a nossa situação.
  • Qual é a diferença entre os dois? Eles fazem a resolução de nomes de forma diferente? Esses servidores não são membros do domínio, eles estão isolados em suas próprias DMZs, se isso mudar alguma coisa.
  • A equipe da Internet configurou um alias SQL no servidor da Web: "mySQLserverName - tcp / ip - xxx.xx.x.xx, 1433". Isso seria somente usado para resolução TCP / IP e não pipes nomeados? Isso poderia ser parte do problema?
  • Se eu fizer desejar forçar o TCP / IP em vez de pipes nomeados, qual é a maneira recomendada de fazer isso? Este KB da Microsoft diz que posso fazer isso modificando a string de conexão. Este tópico do fórum MSDN diz que posso modificar a "ordem preferida" dos protocolos de configuração do cliente nativo. Eu suponho que eu também poderia desativar Named Pipes no SQL Server, mas isso parece um pouco drástico, e provavelmente não é algo para tentar em uma caixa de produção.
por BradC 24.06.2009 / 14:56

2 respostas

1

Normalmente, usamos somente TCP / IP em nossas sequências de conexão (com um número de porta não padrão) e não temos problemas de escalabilidade, tanto para servidores locais quanto baseados em wan.

Você pode forçar a conexão de uso a usar TCP / IP usando o server = dbservername, 1433 na cadeia de conexão (ou seja, especificando o número da porta).

Geralmente, deixamos os pipes nomeados abertos, pois permite que você veja o indicador "Verde" / "Vermelho" no SQL Management Studio para o status do servidor.

Eu examinaria o funcionamento geral do servidor, especialmente o carregamento de rede (conexões / colisões) e o uso de RAM (contadores do SQL Server PerfMon). Às vezes, você pode ter problemas com o pool / release de conexão em servidores muito ocupados (normalmente quando há 1.000 conexões por segundo).

    
por 24.06.2009 / 16:41
1

Se isso estiver acontecendo apenas durante os horários de pico e outras tentativas de conexão do mesmo aplicativo estiverem funcionando bem, talvez você esteja passando pela contenção de memória no servidor SQL ou por um problema de tempo limite.

Tipicamente, Named Pipes é bom para comunicações LAN ou outras redes rápidas e estáveis, mas é um pouco mais chato (isto é, mais sobrecarga) que os soquetes TCIP / IP, portanto não é necessariamente uma boa idéia para conexões mais lentas, como em uma WAN. / p>

Quando você diz que cada servidor é isolado em sua própria DMZ, você quer dizer que você tem várias redes DMZ e cada servidor está em uma diferente? Em caso afirmativo, peça à equipe da Internet que verifique os logs do firewall em busca de conexões descartadas / recusadas / com falha. Se seus servidores estiverem em sub-redes diferentes, talvez você queira configurar o TCP / IP como o protocolo preferido.

Aqui estão alguns artigos que falam sobre diferenças nos protocolos:

por 24.06.2009 / 16:17