Pool de conexões ADO.NET e SQLServer
-
08-06-2019 - |
Pergunta
- O que é?
- Como implemento o pool de conexões com MS SQL?
- Quais são as ramificações de desempenho quando
- Executar muitas consultas uma após a outra (ou seja,usando um loop com mais de 30 mil iterações chamando um procedimento armazenado)?
- Executando algumas consultas que demoram muito (mais de 10 minutos)?
- Existem práticas recomendadas?
Solução
O pool de conexões é um mecanismo para reutilizar conexões, pois o estabelecimento de uma nova conexão é lento.
Se você usa uma string de conexão MSSQL e System.Data.SqlClient então você já está usando - em .Net esse material está oculto na maior parte do tempo.
Um loop de 30 mil iterações pode ser melhor como um cursor do lado do servidor (procure instruções de cursor T-SQL), dependendo do que você está fazendo com cada etapa fora do sproc.
Consultas longas são boas - mas tenha cuidado ao chamá-las de páginas da web, pois o Asp.Net não é realmente otimizado para longas esperas e algumas conexões serão interrompidas.
Outras dicas
Um pouco mais de informação sobre o pool de conexões...você já o está usando com o SqlClient, mas somente se sua cadeia de conexão for idêntica para cada nova conexão aberta.Meu entendimento é que a estrutura agrupará conexões automaticamente quando puder, mas se a cadeia de conexão variar, mesmo que ligeiramente, de uma conexão para outra, a nova conexão não virá do pool - ela será criada novamente (por isso é mais caro ).
Você pode usar o aplicativo Performance Monitor com XP/Vista para observar conexões SQL e verá rapidamente se o pool está sendo usado ou não.Procure na categoria ".NET CLR Data"" no Performance Monitor.
Eu apoio Keith;se você estiver chamando um procedimento armazenado 30.000 vezes, terá problemas muito maiores do que o pool de conexões.
Sua pergunta também foi parcialmente respondida por este tópico.Uma pesquisa teria revelado isso.A definição de Connection Pooling, da qual um Google teria respondido com o primeiro golpe sendo esse..
O que deixaria apenas as melhores práticas, o que acho que teria sido uma boa pergunta :)
+1 para Resposta de Keith.Ele acertou em cheio na cabeça.
Apenas um lembrete educado do FAQ:
Você pesquisou na Internet antes de fazer sua pergunta e vem até nós armados com pesquisas e informações sobre sua pergunta ...certo?