Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A reutilização de conexões permite que um aplicativo utilize uma conexão de um conjunto de conexões já estabelecidas, que não precisam ser restabelecidas a cada uso. Depois que uma conexão for criada e colocada em um pool, um aplicativo poderá reutilizar essa conexão sem executar o processo de conexão completo.
O uso de uma conexão em pool pode resultar em ganhos significativos de desempenho, pois os aplicativos podem economizar a sobrecarga envolvida na criação de uma conexão. Isso pode ser particularmente significativo para aplicativos de camada intermediária que se conectam por uma rede ou para aplicativos que se conectam e desconectam repetidamente, como aplicativos da Internet.
Além dos ganhos de desempenho, a arquitetura de pooling de conexões permite que um ambiente e suas conexões associadas sejam usados por vários componentes em um único processo. Isso significa que os componentes autônomos no mesmo processo podem interagir uns com os outros sem estarem cientes uns dos outros. Uma conexão em um pool de conexões pode ser usada repetidamente por vários componentes.
Observação
O agrupamento de conexões pode ser usado por um aplicativo ODBC que exibe comportamento ODBC 2.x, desde que o aplicativo possa chamar SQLSetEnvAttr. Ao usar o pool de conexões, o aplicativo não deve executar instruções SQL que alterem o banco de dados ou o contexto do banco de dados, como alterar o < do > banco de dados, que altera o catálogo usado por uma fonte de dados.
Um driver ODBC deve ser totalmente thread-safe e as conexões não devem ter afinidade de thread para dar suporte ao pool de conexões. Isso significa que o driver é capaz de lidar com uma chamada em qualquer thread a qualquer momento e é capaz de se conectar em um thread, usar a conexão em outro thread e desconectar em um terceiro thread.
O pool de conexões é mantido pelo Gerenciador de Driver. As conexões são extraidas do pool quando o aplicativo chama SQLConnect ou SQLDriverConnect e são retornadas para o pool quando o aplicativo chama SQLDisconnect. O tamanho do pool cresce dinamicamente, com base nas alocações de recursos solicitadas. Ele reduz com base no tempo limite de inatividade: se uma conexão estiver inativa por um período de tempo (não tiver sido usada em uma conexão), ela será removida do pool. O tamanho do pool é limitado apenas por restrições de memória e limites no servidor.
O Gerenciador de Driver determina se uma conexão específica em um pool deve ser usada de acordo com os argumentos passados em SQLConnect ou SQLDriverConnect e de acordo com os atributos de conexão definidos após a conexão ter sido alocada.
Quando o Gerenciador de Driver está agrupando conexões, ele precisa ser capaz de determinar se uma conexão ainda está funcionando antes de distribuir a conexão. Caso contrário, o Gerenciador de Drivers continua distribuindo a conexão inativa para o aplicativo sempre que ocorrer uma falha de rede transitória. Um novo atributo de conexão foi definido no ODBC 3*.x*: SQL_ATTR_CONNECTION_DEAD. Esse é um atributo de conexão somente leitura que retorna SQL_CD_TRUE ou SQL_CD_FALSE. O valor SQL_CD_TRUE significa que a conexão foi perdida, enquanto o valor SQL_CD_FALSE significa que a conexão ainda está ativa. (Drivers compatíveis com versões anteriores do ODBC também podem suportar esse atributo.)
Um driver deve implementar essa opção eficientemente ou prejudicará o desempenho do gerenciamento de pools de conexões. Especificamente, uma chamada para obter esse atributo de conexão não deve causar uma viagem de ida e volta para o servidor. Em vez disso, um driver deve retornar apenas o último estado conhecido da conexão. A conexão estará morta se a última viagem ao servidor falhar e não estiver morta se a última viagem tiver sido bem-sucedida.
Observações
Se uma conexão tiver sido perdida (relatada via SQL_ATTR_CONNECTION_DEAD), o Gerenciador de Driver ODBC destruirá essa conexão chamando SQLDisconnect no driver. Novas solicitações de conexão podem não encontrar uma conexão utilizável no pool. Eventualmente, o Gerenciador de Driver pode fazer uma nova conexão, supondo que o pool esteja vazio.
Para usar um pool de conexões, um aplicativo executa as seguintes etapas:
Habilita o pool de conexões chamando SQLSetEnvAttr para definir o atributo de ambiente SQL_ATTR_CONNECTION_POOLING como SQL_CP_ONE_PER_DRIVER ou SQL_CP_ONE_PER_HENV. Essa chamada deve ser feita antes que o aplicativo aloque o ambiente compartilhado para o qual o pool de conexões deve ser habilitado. O identificador de ambiente na chamada para SQLSetEnvAttr deve ser definido como nulo, o que torna SQL_ATTR_CONNECTION_POOLING um atributo no nível do processo. Se o atributo estiver definido como SQL_CP_ONE_PER_DRIVER, um único pool de conexões terá suporte para cada driver. Se um aplicativo funciona com muitos drivers e poucos ambientes, isso pode ser mais eficiente porque menos comparações podem ser necessárias. Se definido como SQL_CP_ONE_PER_HENV, um único pool de conexões terá suporte para cada ambiente. Se um aplicativo funciona com muitos ambientes e poucos drivers, isso pode ser mais eficiente porque menos comparações podem ser necessárias. O pool de conexões é desabilitado definindo SQL_ATTR_CONNECTION_POOLING como SQL_CP_OFF.
Aloca um ambiente chamando SQLAllocHandle com o argumento HandleType definido como SQL_HANDLE_ENV. O ambiente alocado por essa chamada será um ambiente compartilhado implícito porque o pool de conexões foi habilitado. No entanto, o ambiente a ser usado não é determinado até que SQLAllocHandle com um HandleType de SQL_HANDLE_DBC seja chamado neste ambiente.
Aloca uma conexão chamando SQLAllocHandle com InputHandle definido como SQL_HANDLE_DBC e o InputHandle definido como o identificador de ambiente alocado para o pool de conexões. O Gerenciador de Driver tenta localizar um ambiente existente que corresponda aos atributos de ambiente definidos pelo aplicativo. Se nenhum ambiente desse tipo existir, um será criado, com uma contagem de referência (mantida pelo Gerenciador de Driver) de 1. Se um ambiente compartilhado correspondente for encontrado, o ambiente será retornado para o aplicativo e sua contagem de referência será incrementada. (A conexão real a ser usada não é determinada pelo Gerenciador de Driver até que SQLConnect ou SQLDriverConnect seja chamado.)
Chama SQLConnect ou SQLDriverConnect para fazer a conexão. O Gerenciador de Driver usa as opções de conexão na chamada para SQLConnect (ou as palavras-chave de conexão na chamada para SQLDriverConnect) e os atributos de conexão definidos após a alocação de conexão para determinar qual conexão no pool deve ser usada.
Observação
Como uma conexão solicitada é correspondida a uma conexão em pool é determinada pelo atributo de ambiente SQL_ATTR_CP_MATCH. Para obter mais informações, consulte SQLSetEnvAttr.
Os aplicativos ODBC que usam o pool de conexões devem chamar CoInitializeEx durante a inicialização do aplicativo e o CoUninitialize quando o aplicativo for fechado.
Chama SQLDisconnect quando terminar com a conexão. A conexão é retornada ao pool de conexões e fica disponível para reutilização.
Para obter uma discussão detalhada, consulte Pooling nos Componentes do Microsoft Data Access.
Considerações sobre pool de conexões
Executar qualquer uma das seguintes ações usando um comando SQL (em vez de por meio da API ODBC) pode afetar o estado da conexão e causar problemas inesperados quando o pool de conexões estiver ativo:
Abrindo uma conexão e alterando o banco de dados padrão.
Usando a instrução SET para alterar as opções configuráveis (incluindo SET ROWCOUNT, ANSI_NULL, IMPLICIT_TRANSACTIONS, SHOWPLAN, STATISTICS, TEXTSIZE e DATEFORMAT).
Criando tabelas temporárias e procedimentos armazenados.
Se qualquer uma dessas ações for executada fora da API ODBC, a próxima pessoa que usar a conexão herdará automaticamente as configurações, tabelas ou procedimentos anteriores.
Observação
Não espere que determinadas configurações estejam presentes no estado de conexão. Você sempre deve definir o estado de conexão em seu aplicativo e garantir que o aplicativo remova as configurações de pool de conexões não utilizados.
Pool de conexões com reconhecimento de driver
A partir do Windows 8, um driver ODBC pode usar conexões no pool com mais eficiência. Para obter mais informações, confira Pool de conexões com reconhecimento de driver.
Consulte Também
Conexão com uma fonte de dados ou driver
Desenvolvendo um driver ODBC
Pooling nos componentes do Microsoft Data Access