Muitas conexões com o Sql Server 2008

1

Eu tenho um aplicativo no C # Framework 4.0. Como muitos aplicativos, este se conecta a uma base de dados para obter informações. No meu caso, esse banco de dados é o SqlServer 2008 Express.

O banco de dados está na minha máquina

Na minha camada de dados, estou usando a Enterprise Library 5.0

Quando publico meu aplicativo na minha máquina local (App Pool Classic)

  • Windows Professional

  • IIS 7.5

O aplicativo funciona bem. Estou usando essa consulta para verificar o número de conexões que meu aplicativo está criando quando estou testando.

SELECT db_name(dbid) as DatabaseName, count(dbid) as NoOfConnections,
       loginame as LoginName
FROM sys.sysprocesses
WHERE dbid > 0 AND db_name(dbid) = 'MyDataBase'
GROUP BY dbid, loginame

Quando começo a testar, o número de conexões começa a crescer, mas, em algum momento, o número máximo de conexões é 26. Acho que tudo bem, porque o aplicativo funciona

Quando publico o aplicativo em TestMachine1

• Máquina virtual no modo XP (Windows XP Professional)

• IIS 5.1

Funciona bem, o comportamento é o mesmo, o número de conexões com o incremento do banco de dados para 24 ou 26, depois disso elas permanecem naquele ponto, não importa o que eu faça no aplicativo.

O problema:

Quando publico no TestMachine2 (App Pool Classic)

• Windows Server 2008 R2

• IIS 7.5

Eu começo a testar o aplicativo para que o número de conexão com o banco de dados comece a crescer, mas desta vez eles crescem muito rapidamente e não param de crescer aos 24 ou 26, o número de conexões cresce até chegar a 100 e o aplicação parar de funcionar nesse ponto.

Verifiquei qualquer diferença nas publicações, especialmente no Windows Professional e no Windows Server, e elas parecem ter os mesmos parâmetros e configurações.

Alguma pista de por que isso poderia estar acontecendo? , alguma sugestão?

    
por Luis Forero 06.12.2011 / 16:52

3 respostas

3

Parece que você precisa investigar seu código para descobrir onde as conexões estão sendo abertas e não fechadas.

    
por 06.12.2011 / 19:46
1

Concordo com as outras respostas que parece que você não está descartando uma conexão (ou comando ou outro recurso descartável) em algum lugar.
Usar um criador de perfil é uma boa ideia.
Rever cuidadosamente o código, procurando apenas por possíveis recursos não dispostos, pode funcionar. (Funcionou para nós, após três revisões).
Enquanto você está testando, sugiro adicionar pooling = false à sua string de conexão. Dessa forma, quando seu aplicativo fecha a conexão, ele realmente fecha, em vez de ficar por aí a critério do algoritmo de pooling.

    
por 06.12.2011 / 21:17
0

Use um gerenciador de perfil de memória em um repro do servidor para descobrir onde os objetos de conexão que não são descartados estão sendo gerados. Corrigir o código Point.Eu tenho o mesmo em um cenário um pouco maior (8000 + connnections em poucos minutos). Me ajudou.

Agora eu uso link extensivamente - provavelmente o bbild memroy profilder e o ÚNICO que eu conheço com uma API para testes unitários;)

    
por 06.12.2011 / 20:56

Tags