Estou executando o SQL Server 2008 R2 SP1, em uma caixa do Windows Server 2008. Eu tenho um script .NET em execução no Visual Studio 2010 que faz o seguinte:
- Entra no banco de dados
- Faz uma mudança
- Itera
O número total de vezes que iterará é 150, no entanto, está parando em 100 conexões e não consigo descobrir o porquê. Eu poderia ajustar meu script para usar apenas um único thread, mas prefiro saber onde estou perdendo uma configuração de conexão máxima, pois isso será mais útil para referência futura.
Aqui está onde eu verifiquei até agora:
- Cadeia de conexão SQL no Visual Studio 2010 (é definido como 1000)
- Propriedades de conexão da instância do banco de dados SSMS (é definido como 0 [infinito] conexões de usuário)
- Pesquisei no Google algumas informações sobre o Server 2008, parece que ele pode lidar com mais de 100 conexões
- Percorreu meu código ao lado
SP_WHO2
que fornece mais informações sobre conexões lógicas, visto que o número de conexões começa em 52 e os erros de script com o erro "Max Pooled Connections reach" em 152 conexões lógicas. - Alterada a string de conexão a ser usada
Data Source=PerfSQL02;Initial Catalog=Masked;Integrated Security=True;Max Pool Size=1000
Não tenho certeza de onde verificar, sei que tenho muitas partes móveis aqui, mas tenho a sensação de que estou perdendo uma configuração máxima de piscina em algum lugar.
Em sua string de conexão, especifique
max pool size=<your desired max pool size>
. Portanto, em outras palavras, se você deseja alterar o tamanho máximo do pool para o valor 500, sua string de conexão pode se parecer com isso:Obviamente, estou assumindo muito com seus outros parâmetros, mas isso deve lhe dar uma boa ideia de como proceder. O pool de conexões é a imposição do provedor do lado do cliente. É o cliente que precisará especificar essa configuração de tamanho máximo do pool, por meio da string de conexão.
Além disso, certifique-se de fechar ou descartar suas conexões corretamente, caso contrário, você irá amarrar as conexões. Algo assim (C#):
O
using
bloco (em C#) chamaIDisposable.Dispose()
após a conclusão. Você também pode implementarSqlConnection.Dispose()
ouSqlConnection.Close()
nofinally
bloco de umtry/catch/finally
bloco.Referência: Documentação do MSDN na propriedade SqlConnection.ConnectionString
O SQL Server permite um máximo de 32.767 conexões por padrão. Pode ser alterado usando
sp_configure
. Para visualizar sua configuração atual para essa configuração, use a seguinte consulta:Por padrão, você deve ver um máximo de 32767,
value_in_use
igual a 0 (use as configurações padrão). Se isso tiver sido alterado, você poderá reconfigurar o SQL Server para usar outros valores conforme descrito no link.Você também deve revisar quantas conexões estão realmente sendo feitas, pois pode haver mais atividades fora do seu aplicativo (ou seu aplicativo está fazendo mais conexões do que você imagina). Você vai querer ver General Statistics -> Logical Connections em qualquer perfmon ou consultar os valores em
sys.dm_os_performance_counters
(cntr_value mostrará o valor atual do ponto no tempo):