Opendb, close y dispose con oracle y .net

Quería preguntarte que opción es más adecuada al programar arrays de objetos con .net contra BD Oracle y pool de conexiones:
1)Que cada objeto se encargue de serializarse a si mismo, abriendo la conexión con la BD y cerrándola. Por tanto hay tantas aperturas/cierres de Bd como objetos. No entra el siguiente objeto si el anterior no ha hecho el dispose.
2)Que la acción de usuario abra la conexión de BD, se la pase a cada uno de los objetos para que cada uno haga lo que tenga que hacer y después cerrar la conexión con la BD una sola vez.
La opción 1) es la que tenemos programada y los de BD me dicen que de repente mi aplicación les pega un subidón de conexiones hasta el máximo que tenemos programado en el web. Config. Y que estamos afectando a otras aplicaciones e incluso las hacemos fallar pues superamos lo máximo que aguanta oracle. Sospecho que el dispose no es instantáneo. Solo es una "petición de dispose" que oracle ejecuta cuando le venga bien y por eso pega el subidón de conexiones abiertas del pool.
Mi duda es si al programar hemos heho una chapucilla y por tanto hemos de pasarnos a programar la opción 2 o bien es un problema de ajuste en Oracle que los de BD no han sabido configurar. El array de objetos pueden llegar a ser entre 50 y 100.

1 respuesta

Respuesta
1
Por cada sesión, oracle reserva un tanto de memoria, por lo que dependiendo de la cantidad de memoria y recursos que tengamos a oracle se le configura un numero de sesiones máximas. Si aumentas el nº máximo de sessiones puede que te quedes sin memoria en el servidor, pero si hay recursos suficientes para abrir más sesiones estas se relizaría más rápido de forma asíncrona.
Teniendo en cuenta que son más de una aplicación tirando de la BBDD puede que 50 o 100 objetos, cada uno con su conexión puede que sean demasiadas.
La opción 2 sería la mejor si no dispones de los recursos suficientes para abrir tantas conexiones.
Cada objeto de la capa de datos recibe una orden muy clara, sencilla y atómica:
Abre conexión, interactúa con la BD, cierra conexión y hace dispose.
Sin llamar a otros objetos, sin bloqueos, etc...
Pero ¿.net? ¿oracle? ¿IIS? No libera la conexión instantáneamente y pega subidones en el numero de conexiones
¿Qué podemos hacer?
Puede que el el servidor de aplicaciones no libere las sesiones inmediatamente aunque tu leberes explícitamente desde tu aplicación. Tampoco se como funciona el método disponse, quizá no libera inmediatamente.
No se cuantos usuarios tiene la BBDD pero no parece muy optimo que un usuario abra 50 o 100 sesiones, de hecho no lo he visto en ningún sitio.
Bien abres un conexión para todos los objetos, o bien limitar el nº de conexiones simultaneas, (no se si se podrá), desde la aplicación o servidor de aplicaciones.
También se puede aumentar el nº de sesiones simultaneas de oracle, pero si lo aumentas más de lo que los recurosos de servidor soportan se caerá la BBDD o empezará a ir muy lento. El administrador de la BBDD sabrá si puedes aumentarlo.
De todas formas el tema de conexiones con la oracle desde .net y IIS debe estar más que machacada y seguro que hay un método optimo de hacerlo, sobre .net se muy poco.
Siento no poder darte un respuesta más concreta pero creo que solo vosotros podéis tomar una decisión teniendo en cuenta todos los factores.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas