The Club
quinta-feira, 2 de setembro 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 e trabalha com tecnologia da informação há mais de 15 anos.
Feed de artigos.
Feed de artigos deste autor.
Gere seu feed personalizado  
MS TechEd 2010

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
ÓTIMO ARTIGO, EU NEM SABIA O QUE ERA UM POOL E ESTAVA PROGRAMANDO INTERFACES DE CONEXOES EM JAVA. ESTA MATERIA ME ABRIU OS HORIZONTES. VALEW.
Quem enviou: EDUARDO SANTANA
Postado em: 11/07/2010 00:00:00
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
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
Construindo um List Suggest com ASP.NET Web Services e JQuery
Acesso à Dados com ASP.NET - Parte 7
Acesso à Dados com ASP.NET - Parte 6
Web Site ou Web Application eis a questão
ASP.NET MVC/MVVM - Criando uma sessão de produtos
Acesso à Dados com ASP.NET - Parte 5
ASP.NET MVC Custom Helpers
Acesso a Dados com ASP.NET - Parte 4
Acesso a Dados com ASP.NET - Parte 3
Acesso a Dados com ASP.NET - Parte 2
Acesso a Dados com ASP.NET - Parte 1
Usando DataSet Tipado com ASP.NET
Gerenciador de conteúdo ASP.NET MVC 2 - Kooboo
Criando um Leitor de Arquivos em ASP.NET
Criando um Leitor de RSS em ASP.NET
Trabalhando com Update Panel no ASP.NET
Como fazer Deploy no ASP.NET 4?
Utilizando jQuery para invocar Actions
Enviando Emails com ASP.NET usando System.Net.Mail
Criando editor de texto personalizado em Asp.Net
JQuery auto complete em Asp.Net
Autenticação via Claims no ASP.NET MVC
Detectando erro a todo custo
Explorando os módulos do WIF para o ASP.NET
Autenticação via Claims no ASP.NET WebForms
Uma nova forma de Autenticação/Autorização
Autenticação e Autorização no ASP.NET MVC
Explorando Segurança do ASP.NET - Roles
Explorando Segurança do ASP.NET - Membership e MembershipUser
Programação Assíncrona no ASP.NET MVC
Produtos relacionados Topo
CD/DVD: CD de Treinamento Criando Aplicações Asp.Net em Camadas (parte integrante do portal de vídeos .Net)
Pacote: Promoção: Portal de Vídeos .Net + CD Novidades das Linguagens (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)
CD/DVD: DVD de Treinamento E-Commerce com Visual Web Developer
CD/DVD: CD de Treinamento - Office SharePoint 2007 para Desenvolvedores WEB
Livro: Desenvolvendo para web usando o Visual Studio 2008
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)
CD/DVD: CD de Treinamento ASP.NET para Iniciantes - Visual Studio 2008
E-Book: ASP.NET Ajax com C# e VB.NET (E-Book com entrega via download)
CD/DVD: CD de Treinamento sobre LINQ to SQL para iniciantes com Visual Studio .Net 2008
CD/DVD: CD de Treinamento Introdução a banco de dados com SQL Server 2005 Express
CD/DVD: CD de Treinamento Novidades das Linguagens C# 3.0 e VB 9 (Visual Basic 9)
CD/DVD: CD ASP.NET 2.0 - Atualização Rápida (Visual Studio .NET 2005)
CD/DVD: CD - Treinamento de ASP.NET 2.0 AJAX Extensions
Livro: ASP.NET Utilizando C# - De Programador para Programador
E-Book: E-book: ASP.NET - Uma revolução na construção de sites e aplicações Web (via download)
Livro: Programando em C#.Net para Web: Guia Rápido Usando Visual Studio.Net 2003
Livro: Desenvolvendo Aplicações PALM com NS BASIC
© 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: 2.623
Artigos: 3.020
Cases: 14
Oportunidades: 4.591
Vídeos .Net: 484
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
O que você fará com o Visual Studio 2010?
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 Wordpress + Tabless (válido somente para pagamento via boleto bancário)
Promoção Wordpress + Tabless (válido somente para pagamento via boleto bancário)
De: R$ 149,70
Por: R$ 99,80
Promoção PHP + MYSQL Intelimax (válido somente para pagamento via boleto bancário)
De: R$ 308,00
Por: R$ 219,00
Promoção Especial Infra
De: R$ 175,95
Por: R$ 136,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
CDs/DVDss
DVD Desenvolvimento de Games - Programando Jogos com o 3D Game Studio
DVD Desenvolvimento de Games - Programando Jogos com o 3D Game Studio
Por: R$ 59,00
DVD Curso de CorelDraw X4
Por: R$ 79,90
DVD Curso de Fireworks CS4
Por: R$ 49,90
DVD Curso de Indesign CS4
Por: R$ 55,00
DVD Curso de Efeitos Digitais
Por: R$ 49,90
Livros
MSProject 2007 - Metodologia e Critérios de Qualidade para o Gerenciamento de Projetos
MSProject 2007 - Metodologia e Critérios de Qualidade para o Gerenciamento de Projetos
De: R$ 129,00
Por: R$ 77,40
Foundation FLASH CS3 para Designers
Ciência Moderna
De: R$ 139,00
Por: R$ 83,40
ALGORITMOS O Guia Essencial
Alta Books
De: R$ 64,90
Por: R$ 58,40
Treinamento Prático em Dreamweaver
Digerati Books
Por: R$ 14,95
Estudo Dirigido de Adobe Photoshop CS4 em português - Para Windows
Erica
De: R$ 88,00
Por: R$ 74,80
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
Júlio Cesar Fabris Battisti
Anderson Patricio
Luiz Felipe de Freitas
Marcio Franco
Eric C M Oliveira
Robert Martim
Ramon Durães
Alessandro de Oliveira Faria
Alfred Reinold Baudisch
Os 10+ | Artigos do dia
HTML Básico
HTML Avançado
Criando aplicativos para o Orkut
PL/SQL - Procedures e Funções
Tutorial de Tabelas Dinâmicas no Excel – Parte 1
Como configurar Conexão Remota no SQL Server 2005
WCF – Gerenciamento de Instância
Básico de C++: Estrutura de um programa em C++
ASP.NET 2.0 - Explorando o GridView
Tutorial: Desenhando com o Corel Draw