Otimizando o Pool de Conexões – Boas Práticas de Programação

Conectar a um servidor de banco de dados geralmente consiste em várias etapas:

  • Um canal físico deve ser estabelecido,
  • A seqüência de conexão informação deve ser analisada,
  • A ligação deve ser autenticada pelo servidor,
  • O controle deve ser executado para a mobilização na transação atual, e assim por diante.

Na prática, a maioria dos aplicativos usa apenas uma ou algumas configurações diferentes para conexões. Isto significa que durante a execução do aplicativo, muitas conexões idênticas serão repetidamente abertas e fechadas.

Para minimizar o custo de desempenho ao acessar os Bancos de Dados, existe uma técnica de otimização chamada Pool de Conexão.

O Pool de Conexões reduz o número que vezes que serão necessárias novas conexões a serem abertas, mantendo a propriedade da conexão física.

Sempre que chamadas são abertas por um usuário numa conexão, o Pool de Conexões procura para ver se há uma conexão disponível armazenada. Se um pool de conexão estiver disponível, ele devolve para o requisitante em vez de abrir uma nova ligação.

Quando o aplicativo chama o método ‘Open’ na conexão, o pooler verifica se essa conexão já existe em seu pool, retornando caso positivo ao invés de criar uma nova. Ao chamar o método ‘Close’, o Pooler devolve a mesma para o Pool de Conexões disponíveis em vez de fechá-lo realmente. Quando a ligação é retornada ao pool, ele está pronto para ser reutilizado na próxima chamada aberta.

Esse sistema de gerenciamento é tranparente à aplicação, sendo totalmente controlado no servidor e, por conta disso, alguns cuidados são necessários para que nosso aplicação não mantenha conexões abertas indevidamente no Pool, desperdiçando recursos e causando queda de desempenho nos servidor.

Via de regra, basta uma atenção simples ao uso da conexão, independente da linguagem utilizada, para que conexões indevidas não permaneçam ativas no Pool.

Em Asp.Net por exemplo, podemos demonstrar esse procedimento da seguinte forma:

Public Sub testaConexao()
    Try
        oConn.Open()
        ' Código de acesso a dados
    Catch ex As Exception
        ' Tratamento de erros
    Finally
        If oConn.State = ConnectionState.Open Then
            oConn.Close() 'Fecha a conexão invariavelmente após a consulta ao Banco de Dados.
        End If
       oConn = Nothing ' Ao fim do uso é boa prática também destruir os objetos.
    End Try
End Sub

Recomendamos sempre seguir a regra de: abrir as conexões o mais tardar e fechar o quanto antes para, desta forma evita que sua aplicação sobrecarregue o Pool de Conexões de nossos servidores e, por consequência, apresente comportamento estranho/travamentos.

Is this Base de conhecimento useful? Useful Useless 0 of 0 people say this Base de conhecimento is useful.