Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Cuando agrupa conexiones puede mejorar de forma considerable el rendimiento y la escalabilidad de la aplicación. En este artículo se describe la agrupación de conexiones en los proveedores de datos .NET Framework para OLE DB, ODBC y Oracle.
OleDb
El proveedor de datos .NET Framework para OLE DB agrupa automáticamente las conexiones mediante la agrupación de sesiones OLE DB. Se pueden utilizar argumentos de cadena de conexión para habilitar o deshabilitar servicios OLE DB, incluida la agrupación. Por ejemplo, la siguiente cadena de conexión deshabilita la agrupación de sesiones OLE DB y la inscripción automática de transacciones.
Provider=SQLOLEDB;OLE DB Services=-4;Data Source=localhost;Integrated Security=SSPI;
Importante
Microsoft recomienda usar el flujo de autenticación más seguro disponible. Si se conecta a Azure SQL, el método de autenticación recomendado es Identidades administradas para recursos de Azure.
Se recomienda que siempre cierre o libere una conexión cuando termine de usarla, para devolver la conexión al pool. Es posible que las conexiones que no se cierren explícitamente no puedan regresar al grupo. Por ejemplo, una conexión que se ha salido del ámbito pero que no se ha cerrado explícitamente solo se devolverá al grupo de conexión si se ha alcanzado el tamaño máximo del grupo y la conexión aún es válida.
Para obtener más información sobre la agrupación de sesiones o recursos de OLE DB, y sobre cómo deshabilitar la agrupación mediante la invalidación de los valores predeterminados del servicio del proveedor OLE DB, vea OLE DB Programmer's Guide.
ODBC
La agrupación de conexiones para el proveedor de datos .NET Framework para ODBC se administra a través del Administrador de controladores ODBC que se utiliza para la conexión, y no se ve afectada por el proveedor de datos .NET Framework para ODBC.
Para habilitar o deshabilitar la agrupación de conexiones, abra Administrador de orígenes de datos ODBC en la carpeta Herramientas administrativas del Panel de control. La pestaña Agrupación de conexiones permite especificar los parámetros de agrupación de conexiones de cada controlador ODBC instalado. Los cambios en la agrupación de conexiones de un controlador ODBC específico afectan a todas las aplicaciones que usan ese controlador ODBC.
OracleClient
El proveedor de datos .NET Framework para Oracle ofrece agrupación automática de conexiones para la aplicación cliente de ADO.NET. También puede suministrar varios modificadores de cadena de conexión para controlar el comportamiento de agrupación de conexiones (vea "Control de la agrupación de conexiones con palabras clave de cadena de conexión", más adelante en este artículo).
Creación y asignación de grupos
Cuando se abre una conexión, se crea un grupo de conexión basado en un algoritmo de coincidencia exacta que asocia el grupo con la cadena de conexión de la conexión. Cada grupo de conexión se asocia con una cadena de conexión distinta. Si se abre una nueva conexión y la cadena de conexión no coincide exactamente con un grupo existente, se crea un nuevo grupo.
Una vez creados, los grupos de conexión no se destruyen hasta que finaliza el proceso activo. Mantener grupos inactivos o vacíos consume muy pocos recursos del sistema.
Adición de conexiones
Para cada cadena de conexión única se crea un grupo de conexión. Cuando se crea un grupo, se crean y agregan al grupo varios objetos de conexión y se satisface así el requisito de tamaño mínimo del grupo. Las conexiones se agregan al grupo cuando es necesario, hasta el tamaño máximo del grupo.
Cuando se solicita un objeto OracleConnection, se obtiene del grupo si se encuentra disponible una conexión que se pueda utilizar. Una conexión de este tipo debe estar sin utilizar en ese momento, tener un contexto de transacción coincidente o no estar asociada con ningún contexto de transacción, y tener un vínculo válido al servidor.
Si se ha alcanzado el tamaño máximo del grupo y no hay disponible ninguna conexión utilizable, la solicitud se pone en la cola. El gestor de conexiones satisface estas solicitudes al reasignar las conexiones conforme se liberan de nuevo en el grupo. Las conexiones se liberan de nuevo en el grupo cuando se cierran o se liberan.
Eliminación de conexiones
El gestor de conexiones quita una conexión del grupo después de que haya estado inactiva durante un período de tiempo prolongado o si detecta que se ha interrumpido la conexión con el servidor. Esto solo puede detectarse después de intentar comunicarse con el servidor. Si se encuentra que una conexión ya no está conectada al servidor, se marca como no válida. El gestor de conexiones analiza periódicamente los pools de conexiones en busca de objetos que se han liberado en el pool y que están marcados como no válidos. Luego, estas conexiones se quitan de forma permanente.
Si existe una conexión a un servidor que ha desaparecido, esta conexión puede extraerse del grupo si el gestor de conexiones no ha detectado que la conexión se ha perdido y no la ha marcado como inválida. Cuando esto se produce, se genera una excepción. No obstante, deberá cerrar la conexión para liberarla de nuevo en el pool de conexiones.
No llame a Close o Dispose en un Connection, un DataReader ni en ningún otro objeto gestionado en el método Finalize de su clase. En un finalizador, libere solo los recursos no administrados que pertenezcan directamente a su clase. Si la clase no dispone de recursos no administrados, no incluya un método Finalize en la definición de clase. Para obtener más información, consulte Recolección de basura.
Compatibilidad con transacciones
Las conexiones se extraen del grupo y se asignan en función del contexto de transacción. El contexto del subproceso solicitante y la conexión asignada deben coincidir. Por lo tanto, cada grupo de conexión se subdivide en conexiones sin ningún contexto de transacción asociado y en N subdivisiones, cada una de las cuales contiene conexiones con un contexto de transacción determinado.
Cuando se cierra una conexión, se devuelta al grupo y a la subdivisión adecuada en función de su contexto de transacción. Por lo tanto, puede cerrar la conexión sin generar un error, incluso aunque aún haya pendiente una transacción distribuida. Esto le permite confirmar o anular la transacción distribuida más adelante.
Controlar la agrupación de conexiones con palabras clave de cadena de conexión
La propiedad ConnectionString del objeto OracleConnection admite pares clave-valor de cadena de conexión que se pueden utilizar para ajustar el comportamiento de la lógica de agrupación de conexiones.
En la siguiente tabla se describen los valores ConnectionString que puede utilizar para ajustar el comportamiento de agrupación de conexiones.
| Nombre | Valor predeterminado | Descripción |
|---|---|---|
Connection Lifetime |
0 | Cuando una conexión se devuelve al grupo, su hora de creación se compara con la hora actual y, si ese marco temporal (en segundos) supera el valor especificado por Connection Lifetime, la conexión se destruye. Esto resulta de utilidad en configuraciones agrupadas para forzar el equilibrio de carga entre un servidor en ejecución y uno que acaba de conectarse.Un valor de cero (0) hará que las conexiones agrupadas tengan el tiempo de espera máximo. |
Enlist |
verdadero | Cuando es true, el concentrador inscribe automáticamente la conexión en el contexto de transacción actual del subproceso de creación, si existe un contexto de transacción. |
Max Pool Size |
100 | El número máximo de conexiones permitido en el grupo. |
Min Pool Size |
0 | El número mínimo de conexiones mantenidas en el grupo. |
Pooling |
verdadero | Cuando es true, la conexión se extrae del grupo adecuado o, si es necesario, se crea y agrega al grupo correcto. |