Revista Active Delphi
terça-feira, 9 de fevereiro de 2010
Busca  
Porta 80 Web Hosting
 :: Acessibilidade
Ir para conteúdo principal: ALT + 1
 :: Participe
Seja um autor de CD/DVD de Treinamento
Publique um artigo
Publique uma oportunidade
Publique uma notícia
Publique um curso
Publique uma dica
Publique um código
 :: Informativo
Receba nossos informativos por e-mail.
E-mail:   
 
Digite a palavra abaixo:  
 
 
 :: Oportunidades
Cadastrar oportunidades
Gerenciar suas oportunidades
Cadastrar nova empresa
 :: Especiais
Básico de C++
C++ Builder
Curso ASP.NET 3.5 em VB.NET e C#
Guia Prático de HTML
Testes com Visual Studio Team System 2008
 :: Desenvolvimento
ActionScript
ADO.NET
ASP
ASP.NET
Automação Comercial
C#
C/C++
Coldfusion
CSS
Delphi
Disp. Móveis
HTML
Java
Javascript
LSL (Second Life)
Modelagem
PHP
Python
Sharepoint
Silverlight
SQL
VBA (Office)
Visual Basic
Visual Basic .NET
Visual Fox Pro
WCF/WPF
Web Services
XML
 :: Infra
BizTalk Server
CRM
Exchange Server
ForeFront / Antigen / IAG
Interoperabilidade
ISA Server
Linux
MOF
MS Dynamics CRM
Network
OCS / LCS
Outlook
Powershell e Scripts
Redes
Segurança
System Center e Gerenciamento
Virtualização
Windows
Windows Server
 :: Banco de Dados
Access
Caché
Firebird
Interbase
MySQL
Oracle
SQL Server
Sybase
 :: Gerência
Arquitetura
Ciclo de Vida de Desenvolvimento
Controle de Versão
Estimativas
Metodologias
MOF
Qualidade e Testes
 :: Design
Corel
Flash
Photopaint
Photoshop
 :: Livros
Análise Sistemas
Aplicativos
Banco de Dados
Certificação
Design e CAD
Gerência
Hardware
Internet
Programação
Programação Web
Rede
Segurança
Servidores
Sistemas Operacionais
 :: CDs/DVDs
Desenvolvimento
Infra
Design
 :: E-Books
.NET 2.0 (VS 2005)
.NET 1.1 (VS 2003)
SQL Server
Excel 2007
Excel 2003
Access 2003
ASP 3.0
Delphi
Java
Artigos


MVP Profile
ADO.NET 2.0: A importância do Pool de Conexões
Por: Renato Guimarães
[Entre em contato com o autor ]
Bacharel em Sistemas de Informação pela Universidade da Região de Joinville – UNIVILLE, e trabalha na Datasul Tecnologia como Gestor de Produto, responsável pela linha de Arquitetura e Integração (EMS Foundation, EAI, Frameworks, DataViewer, ScreenOptimzer). Contibui com a Comunidade .NET há muito tempo e participa do Programa MVP desde 2004, no qual obteve o título na especialidade de Visual C#. Informações para contato:
Spaces: http://spaces.msn.com/renatoguimaraes
MSN: renatokbca@msn.com
MVP Profile: https://mvp.support.microsoft.com/profile=2ab968a2-e4ae-4476-afbe-30008090bd8d
Feed de artigos.
Feed de artigos deste autor.
Gere seu feed personalizado  
ADO.NET 2.0: A importância do Pool de Conexões
Publicado em: 23/02/2007

Introdução

 

A maior parte das aplicações desenvolidas normalmente acessam banco de dados. Sempre que precisar acessar os dados no servidor, SQL Server por exemplo, a aplicação o realizará através de um objeto de conexão de um dos Data Providers do ADO.NET, por exemplo a classe System.Data.SqlClient.SqlConnection. Para criar esta conexão é preciso informar a string de conexão, que indica qual servidor e qual banco de dados será estabelecida a conexão etc.  Em resumo, a string de conexão identifica o fornecedor do banco de dados, nome da máquina onde a aplicação de banco de dados está instalada, nome do banco de dados da aplicação, informações de segurança (usuário, senha, autenticação integrada etc) e parâmetros de controle do Pool de Conexões, entre outras.

 

Imagine que sua aplicação tem uma tela que mostra alguns registros resultantes de uma consulta. Já percebeu que existe uma demora até que os dados sejam exibidos? Boa parte desta demora é porque sua aplicação está criando uma conexão com banco de dados. Só que este processo de conexão não é tão simples e tem um custo alto. Por que? Porque uma conexão com banco de dados consiste de algumas tarefas que consomem recursos: uma comunicação física, por exemplo um Socket, precisa ser estabelecida e para isso é necessário um handshake inicial entre as máquinas; a string de conexão precisa ser analisada e validada; a conexão deverá ser autenticada contra o servidor; algumas verificações para registro numa transação corrente etc. Como uma aplicação precisa interagir várias vezes com o banco de dados, dependendo de como esteja sendo utilizada, o desempenho e a escalabilidade da aplicação podem ser comprometidos. Como essas conexões são custosas, percebe-se a necessidade de reaproveitar as conexões que já foram estabelecidas e utilizá-las da melhor forma possível.

 

A maioria das aplicações usam uma ou poucas configurações de banco de dados diferentes, pois durante a execução da aplicação várias conexões idênticas serão abertas e fechadas, o que poderá impactar a performance da sua aplicação. Como resolver isso? Reutilização das conexões, ok? Até porque você não precisa delas o tempo todo, e sim somente quando for necessário executar algum comando contra o banco de dados.

 

Para minimizar o custo da abertura das conexões, o ADO .NET dispõe de um recurso poderoso chamado Pool de Conexões (ou Connection Pooling), que já está habilitado por padrão no Data Provider para SQL Server, e ainda melhor no ADO.NET 2.0.

 

Este artigo tem por objetivo explicar quase tudo que você precisa saber sobre o Pool de Conexões, seu funcionamento para que você o utiize da melhor forma possível de forma eficiente para garantir o desempenho e escalabilidade da sua aplicação.

 

O que é o Pool de Conexões?

 

                O Pool de Conexões é um repositório que mantém uma lista de conexões abertas e reutilizáveis. Uma aplicação poderá conter um ou vários pools ao mesmo tempo e a qualquer momento, mas estes não são compartilhados entre aplicações. Para cada string de conexão única será criado um pool na primeira vez que a aplicação solicitar uma conexão para uma determinada string de conexão.  Se a aplicação fizer uma nova requisição com uma string de conexão diferente, será criado um novo pool. Todo o controle é garantido pelo Connection Pool Manager do ADO.NET, ou gerenciador do pool. Com o Pool de Conexões não haverá mais necessidade de executar todo o procedimento custoso sempre que a aplicação solicitar uma conexão e sua aplicação poderá reaproveitar as conexões que já foram estabelecidas anteriormente. A tabela 1 ilustra quatro strings de conexão, onde serão criados três pools diferentes, um para cada string que não se repete.

 

Tabela 1: Exemplos de strings de conexão.

String de conexão A:

string strConn =

    "Server=tech-renatog;Initial Catalog=framework;User ID=nomeusuario;Password=senhaforte";                  

using (SqlConnection connection = new SqlConnection(strConn)) {

    //A conexão deverá ser aberta somente quando necessário

    connection.Open();

    //executa comandos etc

}//método Dispose() será invocado automaticamente

String de Conexão B:

string strConn =

    "Server=tech-renatog;Initial Catalog=framework; ID=teste;Password=teste";                  

using (SqlConnection connection = new SqlConnection(strConn)) {

    //A conexão deverá ser aberta somente quando necessário

    connection.Open();

    //executa comandos etc

}//método Dispose() será invocado automaticamente

String de Conexão C:

string strConn =

    "Server=tech-renatog;Initial Catalog=crm;Integrated Security=SSPI";                  

using (SqlConnection connection = new SqlConnection(strConn)) {

    //A conexão deverá ser aberta somente quando necessário

    connection.Open();

    //executa comandos etc

}

String de Conexão D:

string strConn =

    "Server=tech-renatog;Initial Catalog=crm;Integrated Security=SSPI";                  

using (SqlConnection connection = new SqlConnection(strConn)) {

    //A conexão deverá ser aberta somente quando necessário

    connection.Open();

    //executa comandos etc

}

 

Quando uma conexão é aberta pela primeira vez, neste momento é criado um pool de conexão baseado no algoritmo que analisa a string de conexão e a associa ao pool criado recentemente. Cada pool é associado a uma string de conexão única. Quando uma conexão é aberta, se a string de conexão não combinar com alguma já existente no Pool de Conexões, um novo pool será criado. O pool será mantido até que a aplicação seja encerrada e, mesmo que o pool fique inativo ou vazio, não haverá um custo alto para a aplicação.

 

No exemplo da tabela 1 temos quatro strings de conexão.  Para as strings A e B serão criados dois pools diferentes. Perceba que a principal diferença entre as strings A e B é o contexto de segurança, pois conectam o banco de dados com usuários distintos. Para as strings C e D será criado um pool que será fragmentado devido a autenticação integrada. A conexão com autenticação integrada provoca a fragmentação do pool porque as conexões são colocadas no pool de acordo com a string de conexão mais a identidade do usuário, gerando um pool por usuário. Embora melhore o desempenho da aplicação por usuário, um mesmo usário não poderá se beneficiar das conexões feitas por outro usuário.

 

As conexões são adicionadas ao pool por processo, por domínio de aplicação (App Domain), por string de conexão, e quando usa segurança integrada, pelo Registro do Windows. É uma tecnologia que atua do lado cliente (client-side), e o banco de dados não faz idéia se existe um ou mais pools associado a uma aplicação. Tecnologia client-side porque o pool é criado na máquina que está iniciando a conexão através de um objeto DbConnection.  

 


 

Inclua um comentário sobre o artigo Topo
Elogios e críticas são muito bem vindos, porém o comentário deve ter referência ao artigo em pauta.
O portal e o autor agradecem.
Nome:    
E-mail:      
Comentários:    
Digite a palavra abaixo:  
Para dúvidas técnicas, NÃO UTILIZE ESTE ESPAÇO, utilize nosso fórum de discussão.
http://linhadecodigo.com.br/cs2/forum
 
Comentários sobre o artigo Ver Todos comentários
Olá Renato,

Assim como muitos que visitaram o seu site, fiquei muito contente com a didática utilizada no artigo, pois, me ajudou bastante no auxílio de uma questã na faculdade. Parabens!!
Quem enviou: Islan Souza
Postado em: 13/10/2008 00:00:00
Sensacional seu artigo.

Uma verdadeira aula de conhecimento.
Quem enviou: Diego Gomes da Silva
Postado em: 13/10/2008 00:00:00
Oi Renato,
Quero te agradecer mais uma vez por esta grande aula de sabedoria que vc nos deu sobre Pool de conexões, graças a isso consegui resolver um sério problema de desempenho em meu programa. Muito obrigado mesmo, vc é um grande cara. Além de sábio, é desprendido na divulgação do seu precioso conhecimento. Valeu.
Quem enviou: Tom
Postado em: 15/07/2008 00:00:00
cara e muito bom o artigo me ajudou muito valeu.
Quem enviou: joel
Postado em: 03/04/2008 00:00:00
Parabéns pelo Artigo. Fiz alguns testes criando uma aplicação windows forms, e executei esta aplicação 5 vezes (simulando 5 estações clientes), e foi criado uma conexão para cada aplicação aberta, sendo que todas com a mesma string de conexão. Como faço para que minha aplicação cliente (windows forms), utiize o pool de conexões?
Quem enviou: Júlio César
Postado em: 13/07/2007 00:00:00
Parabéns pela matéria!
Concisa e objetiva.
Continue assim.
Quem enviou: Marcelo Moraes
Postado em: 23/05/2007 00:00:00
Olá Gledisson. Obrigado pelo retorno. Desculpe-me pela demora em responder ao seu post. Eu respondi o Rodrigo há algum tempo, mas coloquei a resposta no meu MSN Spaces, esqueci de divulgar.
http://renatoguimaraes.spaces.live.com/blog/cns!256AF1F8919FD3B1!298.entry .

Abaixo segue o texto:
Funciona para ODB também, mas a configuração é diferente. O Pool de Conexões para ODBC é gerenciado pelo ODBC Driver Manager usado para criação da conexão e não é afetado pelo Data Provider do .NET para ODBC.
Para configurar o Pool de Conexões, acesso o ODBC Data Source Administrator (em Painel de Controle, Ferramentas Administrativas). Os parâmetros serão configurados para cada driver ODBC. Perceba que ao alterar o pool para um determinado driver, todas as aplicações também serão afetadas. Mais informações em ODBC Programmer''s Reference.
Quem enviou: Renato Guimarães
Postado em: 08/05/2007 00:00:00
Renato,

excelente artigo, estou ancioso pela resposta a pergunta do Rodrigo Andrade...
Quem enviou: Raymundo Gledisson
Postado em: 04/04/2007 00:00:00
Olá pessoal, obrigado pelo feedback de todos.
Daniel, realmente, erros horríveis. Desculpem-me pela falha, mas meu office não tem correção Pt-BR e, também, não corrigi o artigo da forma que deveria...

Obrigado,

Renato Guimarães.
Quem enviou: Renato Guimarães
Postado em: 07/03/2007 00:00:00
Muito bom.... este artigo veio a na hora certa parabéns pelo artigo....
Quem enviou: Pedro Carvalho
Postado em: 02/03/2007 00:00:00
Outros artigos do autor Topo
Expressões Regulares (Armamento Pesado)
Vídeo: Passagem de Parâmetros por Valor e por Referência com C#
Vídeo: Herança com Visual C#
Struct e Class: Quando usar?
Você tem componentes COM e quer aproveitá-los em .NET?
Manipulando processos através da classe System.Diagnostics.Process
Consultando e invocando métodos dincamicamente usando Reflection
Células Acadêmicas .NET! Uma forma rápida e econômica de se manter atualizado
Como criar um projeto no Visual Studio.NET dentro de um diretório diferente do inetpub/wwwroot
ASP.NET – Uma mudança radical no desenvolvimento web... Sua vida vai mudar!
ASP.NET – Veja como manipular JScript e obter algumas facilidades com a classe Page
ASP.NET - Como transformar um Web Form em um User Control (continuação)
ASP.NET - Como transformar um Web Form em um User Control
Exceções - Uma visão geral
Visual Studio.NET – Agora temos uma verdadeira forma de depurar scripts
ASP.NET - Trabalhando com o modelo de programação Code in Page usando WebMatrix
Artigos relacionados Topo
Programação Assíncrona no ASP.NET MVC
Compactação de ViewState em ASP.NET
Criando e utilizando User Controls no Silverlight
Gerando JavaScript do lado do servidor com ASP.NET
Introdução às Dependency Properties
Efeitos de imagem com ASP.NET e LightBox 2
Marca d´agua em imagens usando System.Drawing
Asp.Net + Twitter sem API de terceiros
Trabalhando com Accordion
Trabalhando com o componente TabContainer
Por que alguns grupos de usuários falham?
Suggest/Autocomplete com C#, Asp.Net e jQuery
Galeria de Imagens com C#, Asp.NET e jQuery
Recorte de Imagens com C#, Asp.NET e jQuery
Curso ASP.NET 3.5 em VB.NET e C# - Relatórios com Crystal Report
Curso ASP.NET 3.5 em VB.NET e C# - Distribuindo sua Aplicação
ModalDialogExtender
Curso ASP.NET 3.5 em VB.NET e C# - Eventos da aplicação
Curso ASP.NET 3.5 em VB.NET e C# - Criando uma página de erros personalizada
Curso ASP.NET 3.5 em VB.NET e C# - Criando e Consumindo WebServices
Configurando e utilizando a Session
Migrando de ASMX para WCF
WCF Service no IIS
WCF, IIS e Threads
UserName e Certificados
Melhorias na configuração de serviços WCF
Customizando o ServiceHost
Formatar dados com o ASP.NET Dynamic Data
Problemas com modelos de aplicações web
ASP.NET Dynamic Data
Produtos relacionados Topo
Pacote: Promoção: Portal de Vídeos .Net + CD Novidades das Linguagens (válido somente para pagamento via boleto bancário)
Pacote: Promoção Linq To SQL (válido somente para pagamento via boleto bancário)
Pacote: Promoção ASP.Net com Banco de Dados (válido somente para pagamento via boleto bancário)
Pacote: Promoção Linq + Asp.Net
Livro: Cloud Computing - Computação em Nuvem
Pacote: Pacote promocional Linq to SQL
CD/DVD: DVD de Treinamento E-Commerce com Visual Web Developer
Livro: ASP.NET AJAX em Ação
Livro: Construindo um Portal Web 2.0 com ASP.NET 3.5
CD/DVD: CD de Treinamento - Office SharePoint 2007 para Desenvolvedores WEB
CD/DVD: DVD de Treinamento - Crie uma aplicação ASP.NET com LINQ TO SQL
Livro: Desenvolvendo para web usando o Visual Studio 2008
Livro: ASP.NET 3.5 para Leigos
Livro: ASP.NET 2.0 Web Parts em Ação
CD/DVD: DVD de Treinamento Explorando o LINQ para SQL
Pacote: Pacote: Desenvolvedor Web Kit III (4 CDs)
Pacote: Pacote: Desenvolvedor Web Kit II (3 CDs)
Pacote: Pacote: Desenvolvedor Web Kit I (2 CDs)
CD/DVD: CD de Treinamento - RAD Studio 2007 e ASP.NET 2.0 (Delphi)
Pacote: Pacote ASP.NET - 4 CDs (Implementando AJAX em páginas ASP.NET 3.5 com o Visual Studio .NET 2008 + ASP.NET 2.0 Básico + Um mergulho no Controle GridView do ASP.NET 2.0 + Explorando as novidades)
CD/DVD: CD de Treinamento – Implementando AJAX em páginas ASP.NET 3.5 com o Visual Studio .NET 2008
Livro: Professional ASP.NET Ajax
Livro: Faça um Site - ASP.NET com Enfoque em VB.NET e Linguagem SQL
CD/DVD: CD de Treinamento ASP.NET para Iniciantes - Visual Studio 2008
Livro: Windows Presentation Foundation
Livro: Pro WF Windows Workflow no .NET 3
Livro: Criação de Sites Profissionais em ASP (ASP.NET)
Livro: Como programar com ASP.Net e C#
Livro: Web 2.0 e Mashups - Reinventando a Internet
Livro: Aprenda ASP.NET AJAX em 15 Passos
Livro: O Perfil do Gerente de Projetos Brasileiro
© Copyright 2001-2010 Codeline Editora, Comércio e Tecnologia Ltda. | Política de privacidade e de uso | Anuncie | Fale conosco

» Site hospedado na Porta 80 Web Hosting «
Nossos números
Dicas: 1.314
Códigos/scripts: 279
Funções de VBScript : 90
Funções JScript : 05
Livros: 1.805
Notícias: 1.942
Artigos: 2.745
Cases: 14
Oportunidades: 4.185
Publicidade

Conheça a loja do Linha de Código.

Microsoft indica Linha de Código.

Assine a Revista Mundo .NET
Portal de Vídeos .NET - os melhores vídeos .NET estão aqui
Baixe o Visual Studio 2010 Beta
Revista Codificando .Net

Siga-nos no Twitter

Linha de Código no Orkut
Fórum de discussão do portal Linha de Código
Feeds
Oportunidades
Notícias
Artigos
Artigos personalizado
       (Por assunto)
Artigos personalizado
       (Por autor)
Portal Vídeos .NET
Portal Vídeos Delphi
LC Blog
       (Onde você faz a notícia)
Promoções
Promoção Mobile (válido somente para pagamento via boleto bancário)
Promoção Mobile (válido somente para pagamento via boleto bancário)
De: R$ 239,00
Por: R$ 146,00
Promoção: Portal de Vídeos .Net + CD Novidades das Linguagens (válido somente para pagamento via boleto bancário)
De: R$ 162,00
Por: R$ 89,00
Promoção VSTS (válido somente para pagamento via boleto bancário)
De: R$ 219,00
Por: R$ 146,00
Promoção Linq To SQL (válido somente para pagamento via boleto bancário)
De: R$ 249,00
Por: R$ 156,00
Promoção ASP.Net com Banco de Dados (válido somente para pagamento via boleto bancário)
De: R$ 249,00
Por: R$ 146,00
CDs
DVD de Treinamento LINQ TO SQL e Entity Framework Avançado
DVD de Treinamento LINQ TO SQL e Entity Framework Avançado
De: R$ 83,00
Por: R$ 73,00
Curso completo de MySQL
Por: R$ 89,00
DVD de Treinamento - ISA Server 2006 - Implementação
De: R$ 83,00
Por: R$ 73,00
CD de Treinamento Adobe Photoshop CS4 Extended – 3D Arte
De: R$ 83,00
Por: R$ 53,00
DVD de Treinamento - Recursos avançados do Windows Mobile 6
De: R$ 83,00
Por: R$ 73,00
Livros
Aprendendo SQL
Aprendendo SQL
Por: R$ 83,00
Web Services SOAP em Java
Novatec
Por: R$ 42,00
Guia Mangá de Bancos de Dados
Novatec
Por: R$ 39,00
Guia Mangá de Estatística
Novatec
Por: R$ 39,00
Guia Mangá de Eletricidade
Novatec
Por: R$ 39,00
E-Books
Manual Completo de Estudos MCSE 70-270 - Instalando, Configurando e Administrando o Windows XP (506 páginas) - Entrega via download
Manual Completo de Estudos MCSE 70-270 - Instalando, Configurando e Administrando o Windows XP (506 páginas) - Entrega via download
Por: R$ 30,00
Manual de Estudos - Exame 70-291 - Windows Server 2003 (606 páginas) - entrega via download
Por: R$ 30,00
Dominando MS – Visio ® em 20 Passos - Melhores Práticas em Gestão de Projetos (entrega via download)
Por: R$ 30,00
MS-Project® 2007 - Melhores Práticas de Gestão de Projetos - Dominando MS – Project ® em 20 Passos (e-book com entrega via download)
Por: R$ 20,00
Banco de dados com C# e Visual Studio .Net 2005 (entrega via download)
Por: R$ 20,00
Os 10+ | Autores do dia
Israel Aéce
Luiz Felipe de Freitas
Anderson Patricio
Júlio Cesar Fabris Battisti
Alfred Reinold Baudisch
Ramon Durães
Marcio Franco
Renato Haddad
Alessandro de Oliveira Faria
Robert Martim
Os 10+ | Artigos do dia
HTML Básico
HTML Avançado
Criando aplicativos para o Orkut
Aplicando maquiagem facial no Adobe Photoshop Cs 2®
ASP.NET 2.0 - Explorando o GridView
Tutorial de Tabelas Dinâmicas no Excel – Parte 1
SQL Server Replication Passo-a-Passo
PL/SQL - Procedures e Funções
Tutorial: Desenhando com o Corel Draw
Sistema de autenticação de usuários em PHP usando sessões e MySQL