Estamos construindo um novo cluster BizTalk, com dois BizTalk Application Servers e dois SQL Servers. Do SSMS no BizTalk AppServer #1 (e similarmente do #2), temos dois cenários:
Atual - nossa equipe de infraestrutura acaba de reconstruir o Windows 2012/R2. Ele não pode se conectar a um SQL Server específico, mas pode se conectar a outros. A parte desconcertante é que qualquer outra máquina parece ser capaz de se conectar ao mesmo SQL Server perfeitamente e também executar consultas nele.
Ontem - (Nós reconstruímos a caixa desde ontem, então não podemos voltar... só queria descrever os problemas.) Parecia estar se conectando esporadicamente. Quando ele foi conectado, tentei algumas consultas, criei um banco de dados e uma tabela de teste e tentei o seguinte:
Código:
declare @MaxLoops int = 100
declare @LoopCounter int = 0
while (@LoopCounter < @MaxLoops)
begin
set @LoopCounter = @LoopCounter + 1
--select SYSDATETIME(), * from NealTest.dbo.NealTest
waitfor delay '00:00:01'
print @LoopCounter
print SYSDATETIME()
end
Minha intenção original do script era ver se perdíamos as conexões depois que ele "rolava", em outras palavras, eu poderia configurá-lo e aumentar o @MaxLoops
e deixá-lo rodar por uma hora ou algo assim. (Também poderia adicionar try/catch para ajudá-lo a continuar para ver se havia problemas de conectividade esporádicos.)
O script (com a Select
declaração comentada) deu uma
Erro no nível de transporte
Então começamos a destacar uma ou duas linhas de cada vez. A declaração funcionou bem e pude imprimir os valores após a declaração. Quando baixamos o @MaxLoops
para 5, ele realmente funcionou. Aumentamos para 15 com falha Transport-level error
. O mesmo script é executado bem (até @MaxLoops = 1000
) de qualquer outro cliente no cliente SSMS 2008 ou 2012 em execução no mesmo SQL Server.
Isso me levou a pensar que o tamanho do pacote envolvido pode ter sido o problema. Coloquei cerca de 20 linhas de dados com 40 bytes por linha e consegui selecionar a tabela inteira, o que parecia anular a ideia de que o tamanho do pacote era o problema.
Além disso, a partir do BizTalk App Server nº 1, podemos usar o SSMS para conectar a qualquer outro SQL Server em nossa loja e funciona bem. Portanto, o problema parece estar especificamente entre esses dois pares de servidores.
Estamos presos, tentando decidir se devemos ligar para a Microsoft, reconstruir o SQL Server ou o quê.
O servidor SQL @@Version
é
Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64)
28 de dezembro de 2012 20:23:12
Copyright (c) Microsoft Corporation Standard Edition (64 bits) no Windows NT 6.2 (Build 9200: )
O problema original era que o utilitário de configuração do BizTalk apresentava os mesmos "erros no nível de transporte". No cenário atual, o BizTalk nem está instalado. Se o SSMS não puder se conectar, não esperamos que o BizTalk se conecte.
Não há firewall entre esses servidores internos. Algum GroupPolicy poderia ter algum impacto?
Não tenho certeza de qual método de autenticação você está usando, mas tenho visto problemas ao usar a Autenticação do Windows quando o DC (controlador de domínio) está sendo sobrecarregado com solicitações que você pode ver problemas. Normalmente, é um problema de tempo limite.
Se você estiver usando o Windows Auth, tente alternar para o SQL Auth para descartar isso. Desculpe, tentei adicionar um comentário, mas não me deixou porque sou novo.
Abrimos um Ticket da Microsoft, e essa foi a resposta da nossa equipe de infraestrutura. Não recebi o HotFix KB #.
Etapas para corrigir o problema:
1) Altere os arquivos Hosts em ambos os nós SQL para mostrar 127.0.0.1 LocalHost
2) Desabilite Receive Side-Scaling na guia NIC Configuration/Advanced em todos os 4 nós. Isso também deve ser executado no prompt de comando com: netsh int tcp set global rss=disabled
3) Desative o TSC Chimney na guia NIC Configuration/Advanced em todos os 4 nós. Isso também deve ser executado no prompt de comando com: netsh int tcp set global chimney=disabled
4) Desabilite Large Send Offload V2 (IPv4) na guia NIC Configuration/Advanced
5) Reinicie todos os nós
6) Depois que os nós estiverem on-line novamente, inicie um prompt de comando e verifique se as Propriedades da conexão ainda estão desabilitadas com o comando: netsh int tcp show global