Share via


Pool de conexões OLE DB, ODBC e Oracle

O agrupamento de conexões pode melhorar significativamente o desempenho e a escalabilidade do seu aplicativo. Esta seção discute o pool de conexões para os provedores de dados do .NET Framework para OLE DB, ODBC e Oracle.

OleDb

O Provedor de Dados do .NET Framework para OLE DB agrupa automaticamente conexões usando o pool de sessões OLE DB. Os argumentos da cadeia de conexão podem ser usados para habilitar ou desabilitar serviços OLE DB, incluindo pooling. Por exemplo, a cadeia de conexão a seguir desabilita o pool de sessões OLE DB e o alistamento automático de transações.

Provider=SQLOLEDB;OLE DB Services=-4;Data Source=localhost;Integrated Security=SSPI;

Recomendamos que você sempre feche ou elimine uma conexão quando terminar de usá-la para retornar a conexão ao pool. As conexões que não estão fechadas explicitamente podem não ser retornadas ao pool. Por exemplo, uma conexão que saiu do escopo, mas que não foi fechada explicitamente, só será retornada ao pool de conexões se o tamanho máximo do pool tiver sido atingido e a conexão ainda for válida.

Para obter mais informações sobre sessão OLE DB ou pool de recursos, bem como como desabilitar o pool substituindo os padrões de serviço do provedor OLE DB, consulte o Guia do programador OLE DB.

ODBC

O pool de conexões para o Provedor de Dados do .NET Framework para ODBC é gerenciado pelo Gerenciador de Driver ODBC usado para a conexão e não é afetado pelo Provedor de Dados do .NET Framework para ODBC.

Para habilitar ou desabilitar o pool de conexões, abra o Administrador de Fonte de Dados ODBC na pasta Ferramentas Administrativas do Painel de Controle. A guia Pool de conexões permite especificar parâmetros de pool de conexões para cada driver ODBC instalado. As alterações no pool de conexões para um driver ODBC específico afetam todos os aplicativos que usam esse driver ODBC.

OracleClient

O Provedor de Dados do .NET Framework para Oracle fornece pool de conexões automaticamente para seu aplicativo cliente ADO.NET. Você também pode fornecer vários modificadores de cadeia de conexão para controlar o comportamento do pool de conexões (consulte "Controlando o pool de conexões com palavras-chave de cadeia de conexão", mais adiante neste tópico).

Criar e atribuir pools

Quando uma conexão é aberta, um pool de conexões é criado com base em um algoritmo de correspondência exato que associa o pool à cadeia de conexão na conexão. Cada pool de conexões está associado a uma cadeia de conexão distinta. Quando uma nova conexão é aberta, se a cadeia de conexão não for uma correspondência exata com um pool existente, um novo pool será criado.

Uma vez criados, os pools de conexão não são destruídos até que o processo ativo termine. A manutenção de pools inativos ou vazios usa muito poucos recursos do sistema.

Adição de conexão

Um pool de conexões é criado para cada cadeia de conexão exclusiva. Quando um pool é criado, vários objetos de conexão são criados e adicionados ao pool para que o requisito de tamanho mínimo do pool seja atendido. As conexões são adicionadas ao pool conforme necessário, até o tamanho máximo do pool.

Quando um OracleConnection objeto é solicitado, ele é obtido do pool se uma conexão utilizável estiver disponível. Para ser utilizável, a conexão deve estar atualmente sem uso, ter um contexto de transação correspondente ou não estar associada a nenhum contexto de transação e ter um link válido para o servidor.

Se o tamanho máximo do pool tiver sido atingido e nenhuma conexão utilizável estiver disponível, a solicitação será enfileirada. O pool de conexões satisfaz essas solicitações realocando conexões à medida que elas são liberadas de volta para o pool. As conexões são liberadas de volta para o pool quando são fechadas ou descartadas.

Remoção de conexão

O pool de conexões remove uma conexão do pool depois que ela estiver ociosa por um longo período de tempo ou se detetar que a conexão com o servidor foi cortada. Isso pode ser detetado somente depois de tentar se comunicar com o servidor. Se for encontrada uma conexão que não está mais conectada ao servidor, ela será marcada como inválida. O pool de conexões verifica periodicamente os pools de conexões procurando objetos que foram liberados para o pool e estão marcados como inválidos. Essas conexões são então removidas permanentemente.

Se existir uma conexão com um servidor que desapareceu, essa conexão poderá ser extraída do pool se o pool de conexões não tiver detetado a conexão cortada e marcado como inválida. Quando isso ocorre, uma exceção é gerada. No entanto, você ainda deve fechar a conexão para liberá-la de volta ao pool.

Não chame Close ou Dispose em um Connection, um DataReader, ou qualquer outro objeto gerenciado no Finalize método de sua classe. Em um finalizador, libere apenas recursos não gerenciados que sua classe possui diretamente. Se sua classe não possui recursos não gerenciados, não inclua um Finalize método em sua definição de classe. Para obter mais informações, consulte Coleta de lixo.

Suporte a transações

As conexões são extraídas do pool e atribuídas com base no contexto da transação. O contexto do thread solicitante e a conexão atribuída devem corresponder. Portanto, cada pool de conexões é subdividido em conexões sem contexto de transação associado e em subdivisões N que contêm conexões com um contexto de transação específico.

Quando uma conexão é fechada, ela é liberada de volta para o pool e para a subdivisão apropriada com base em seu contexto de transação. Portanto, você pode fechar a conexão sem gerar um erro, mesmo que uma transação distribuída ainda esteja pendente. Isso permite que você confirme ou anule a transação distribuída posteriormente.

Controlar pool de conexões com palavras-chave de cadeia de conexão

A ConnectionString propriedade do objeto suporta pares chave/valor da cadeia de OracleConnection conexão que podem ser usados para ajustar o comportamento da lógica do pool de conexões.

A tabela a seguir descreve os valores que você pode usar para ajustar o ConnectionString comportamento do pool de conexões.

Nome Predefinição Description
Connection Lifetime 0 Quando uma conexão é retornada ao pool, seu tempo de criação é comparado com o tempo atual e a conexão é destruída se esse intervalo de tempo (em segundos) exceder o valor especificado por Connection Lifetime. Isso é útil em configurações clusterizadas para forçar o balanceamento de carga entre um servidor em execução e um servidor recém-colocado online.

Um valor zero (0) fará com que as conexões agrupadas tenham o tempo limite máximo.
Enlist 'verdadeiro' Quando trueo , o pooler inscreve automaticamente a conexão no contexto de transação atual do thread de criação, se existir um contexto de transação.
Max Pool Size 100 O número máximo de conexões permitidas no pool.
Min Pool Size 0 O número mínimo de conexões mantidas no pool.
Pooling 'verdadeiro' Quando true, a conexão é extraída do pool apropriado ou, se necessário, criada e adicionada ao pool apropriado.

Consulte também