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:
- Chega ao banco de dados
- Faz uma mudança
- Iterates
O número total de vezes que iterará é 150, no entanto, ele 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 será mais útil saber para referência futura.
Aqui é onde eu verifiquei até agora:
- String de conexão SQL no Visual Studio 2010 (está definido como 1000)
- Propriedades de conexão da instância do banco de dados SSMS (é definido como 0 [infinito] conexões de usuário)
- Pesquisou algumas informações no Server 2008, parece que ele pode lidar com mais de 100 conexões
- Percorreu meu código ao lado, o
SP_WHO2
qual 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 "Máximo de conexões em pool atingidas" em 152 conexões lógicas. - Alterada a cadeia 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 mais verificar, sei que tenho muitas partes móveis aqui, mas estou com a sensação de que estou perdendo uma configuração máxima de piscina em algum lugar.
sql-server
Sean Long
fonte
fonte
System.Data.SqlClient
padrão é 100, e é por isso que você vê a exaustão do conjunto de conexões).Respostas:
O SQL Server permite no máximo 32767 conexões por padrão. Pode ser alterado usando
sp_configure
. Para visualizar sua configuração atual para esta configuração, use a seguinte consulta:Por padrão, você deve ver no máximo 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 atividade fora do seu aplicativo (ou seu aplicativo está fazendo mais conexões do que você imagina). Você deseja consultar Estatísticas Gerais -> Conexões Lógicas no perfmon ou consultar os valores em
sys.dm_os_performance_counters
(cntr_value mostrará o valor atual do ponto no tempo):fonte
Na sua cadeia 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 cadeia de conexão pode se parecer com isso:Obviamente, estou assumindo muito com seus outros parâmetros, mas isso deve lhe dar uma boa idéia de como proceder. O pool de conexões é 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 cadeia de conexão.
Além disso, verifique se você está fechando ou descartando suas conexões corretamente, caso contrário, amarre 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
fonte
Data Source=PerfSQL02;Initial Catalog=Masked;Integrated Security=True;Max Pool Size=1000
SqlConnection.ConnectionString
para a operação específica. Essa seria a maneira mais fácil. Semax pool size
não estiver lá, são 100 então.