Exatamente 5000 portas!

Essa foi uma situação curiosa. Realizamos um teste de stress para validar a carga de um servidor SQL Server e, para nossa surpresa,  deparamos com erros “SQL Server Does Not Exist Or Access Denied”. Usando o NETSTAT, observamos que havia um limite de número de portas aberta, chegando até a porta 5000, no máximo.

image

A questão é por que o limite da porta 5000 e não 5001, 5002, 5003 ou 5004?

Encontramos a explicação ninja! O limite está relacionado com as “portas efêmeras”, que estabelece o intervalo 1025-5000 para conexões TCP/IP. O diagnóstico pode ser feito com o auxílio da ferramenta NETSTAT, como mostra o artigo Avoiding TCP/IP Port Exhaustion.

Felizmente o limite da porta 5000 pode ser aumentado para o máximo de 65534 através de uma chave no registry:

[HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]

Parâmetro: MaxUserPort
Tipo: DWORD
Valor: 65534

Esse parâmetro deve ser avaliado nas máquinas clientes (servidores de aplicação), não sendo necessário alterar a configuração no servidor SQL.

Mensagens de erro “SQL Server Does Not Exist Or Access Denied” estão normalmente associados a configuração da aplicação cliente.

 

Windows Vista

Essa semana acabei de encontrar um problema de conexão a partir de uma estação Windows Vista. Não tem nenhuma relação com as portas efêmeras, mas está relacionado à configuração de firewall. Mais informações estão documentadas no artigo KB944390.

 

Referência

Avoiding TCP/IP Port Exhaustion
https://msdn.microsoft.com/en-us/library/aa560610(BTS.20).aspx

You cannot access a SQL Server database by using the OLE DB provider for SQL Server when your application is in a high-stress scenario
https://support.microsoft.com/kb/907264

Description of TCP/IP settings that you may have to adjust when SQL Server connection pooling is disabled
https://support.microsoft.com/kb/328476

FIX: Error message when you connect to a named instance of SQL Server on a client computer that is running Windows Vista or Windows Server 2008: "Specified SQL server not found" or "Error Locating Server/Instance Specified"
https://support.microsoft.com/kb/944390