5

Mi aplicación tiene problemas de rendimiento, así que comencé a investigar esto desde la raíz: "La conexión con la base de datos".Para cerrar o no cerrar una conexión de Oracle?

Las mejores prácticas dice: "Abrir una conexión, usarlo y cerca es tan pronto como sea posible", pero no sé la sobrecarga que esto provoca, así que la pregunta es:

1 - "abierto, uso Cerrar las conexiones lo antes posible es el mejor enfoque usando ODP.NET? "

2 - ¿Hay alguna manera y cómo usar la agrupación de conexiones con ODP.NET? Estoy pensando en crear una lista para almacenar algunas cadenas de conexiones y crear una lógica para elegir la "mejor" conexión cada vez que lo necesite. ¿Es esta la mejor manera de hacerlo?

+2

¿Está hablando de una aplicación cliente/servidor? O una aplicación de tres niveles? ¿Está indicando que ha perfilado la aplicación y determinado que abrir y cerrar las conexiones de la base de datos es un cuello de botella? ¿O simplemente está adivinando que los problemas de rendimiento pueden estar relacionados con la base de datos? –

+1

¿De quién es la mejor práctica? Abrir una conexión a la base de datos es una operación costosa y que requiere mucho tiempo.Por lo tanto, el mejor consejo es mantener las conexiones abiertas y en uso el mayor tiempo posible. – APC

+0

Justin. Sí, es una aplicación Asp.Net, por lo que es cliente/servidor, con 3 o 4 niveles, la "Operación de conexión abierta" no es el cuello de botella, pero supongo que contribuye a la disminución del rendimiento (si no se usa correctamente). – Ewerton

Respuesta

6

] Aquí es un conjunto de diapositivas que contiene Oracle de mejores prácticas recomendadas:

http://www.oracle.com/technetwork/topics/dotnet/ow2011-bp-performance-deploy-dotnet-518050.pdf

automáticamente obtendrá un pool de conexiones cuando se crea un OracleConnection. Para la mayoría de las aplicaciones de nivel medio, querrás aprovechar eso. También deberá ajustar su grupo para una carga de trabajo realista activando Contadores de rendimiento en el registro.

Consulte la ayuda en línea de ODP.NET para obtener detalles sobre la agrupación de conexiones. La configuración de la piscina se agrega a la cadena de conexión.

Otro problema con el que las personas se topan con OracleConnections es que el recolector de basura no se da cuenta de lo verdaderamente intensivos en recursos que son y no los limpia de inmediato. Esto se ve agravado por el hecho de que ODP.NET no está completamente administrado, por lo que algunos recursos están ocultos para el recolector de basura. Por lo tanto, la mejor práctica es cerrar() Y descartar() todos los objetos Oracle ODP.NET (incluida OracleConnection) para forzarlos a limpiarse.

Este tema en particular será mitigado en el proveedor completamente gestionada de Oracle (una beta será en breve)

(EDIT: ODP.NET, conductor logró ya está disponible.)

Cristiano Shay

Oracle

1

ODP.NET es un proveedor de datos para ADO.NET. La mejor práctica para ADO.Net es Abrir, Obtener datos (en memoria), cerrar, usar en datos de memoria. Por ejemplo, usando un OracleDataReader para cargar datos en una DataTable en la memoria y cerrar la conexión.

[ 's

0

Para una sola transacción, esto es lo mejor, pero para las transacciones múltiples donde se compromete al final esta podría no ser la mejor solución. Debe mantener la conexión abierta hasta que la transacción se confirme o se retrotraiga. ¿Cómo se maneja eso y también cómo se verifica que la conexión aún existe en ese caso? (Es decir, falla de la red). Hay una propiedad ConnectionState.Broken que no funciona en este punto.

Cuestiones relacionadas