relate perguntas
-
SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado
-
Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?
-
Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?
-
Quais são as principais causas de deadlocks e podem ser evitadas?
-
Como determinar se um Índice é necessário ou necessário
O número máximo de conexões nas versões e edições do SQL Server é 32.767.
Você pode determinar quantas conexões o SQL Server tem atualmente observando:
Se a proporção entre conexões usadas e não utilizadas da consulta acima for preocupante, é provável que o pool de conexões esteja habilitado por aplicativos cliente conectados ao servidor e essas conexões não estejam sendo usadas de forma eficiente. Você pode querer que os desenvolvedores modifiquem a cadeia de conexão desses aplicativos para limitar o tamanho do pool de conexões e garantir que eles estejam descartando as conexões corretamente. Se as conexões não estiverem sendo descartadas corretamente, elas permanecerão abertas enquanto o aplicativo cliente estiver em execução.
Se você está se sentindo particularmente raivoso e precisa se livrar de todas as conexões que não realizaram nada recentemente (independentemente de estarem realmente executando o trabalho), você pode executar o seguinte código, que gerará uma lista de sessões que pode ser morto. Você precisaria copiar e colar os comandos gerados em uma nova janela do SSMS para realmente executar os comandos. Eu também recomendo ter seu currículo atualizado apenas no caso .
É possível dimensionar linearmente o número de conexões além de 32.767 fragmentando os dados em vários nós do SQL Server. No entanto, na minha opinião, usar o sharding como forma de contornar o limite do número de conexões é semelhante a usar uma bomba atômica para matar uma aranha. Ele vai matar a aranha, mas você pode ter problemas maiores no final do dia. Sem mencionar que é muito difícil construir uma bomba atômica, sem mencionar implementar o sharding corretamente.
Eu me deparei com um comportamento estranho com o pool de conexões no passado, e seu cenário se alinha bem com uma dessas situações. Se o seu aplicativo estiver usando o pool de conexões (e isso ainda é especulação, neste momento, até que você confirme ou negue), você terá muitas conexões que permanecerão abertas. Isso é por design.
O pool de conexões visa reduzir a sobrecarga de criar uma conexão de banco de dados. Vamos pegar, por exemplo, um pool de conexões de 3. Até onde eu sei, o ciclo de vida é algo assim (começando de um cache do pool de conexões frias):
sp_reset_connection
no thread 1Esta é uma simplificação excessiva, mas os pontos salientes incluem:
sp_reset_connection
é chamado.Aqui está o material de referência que usei para chegar a essas conclusões.
Pool de conexões para DBA do SQL Server
O caso da transação órfã