Error en base de datos oracle "DATABASE dLimits Current Open Cursors Count IS AT 1221"

Tengo el siguientes error y quisiera saber porque ocurre esto DATABASE Limits Current Open Cursors Count IS AT 1221
1

1 respuesta

Respuesta
1
Podrías modificar el parámetro de la base de datos "open_cursor" a unos 1500 o 2000 aun unos 3000, aunque pudiera influenciar en el rendimiento de la base, dependiendo de la demanda de ésta. Aunque ese error por lo general se da por errores en la programación de tu aplicación la cual considero deberías revisar, dado que este parámetro aplica "per user" (es decir 2000 open cursor por usuario) y no es un parámetro global, es muy probable que el aplicativo este generando demasiados cursores innecesarios.
Suerte.
Este parámetro es por usuario pensaba que era global, ahora como hago para revisar la aplicación podría ver por oracle lo cursores que son innecesario, gracias por tu ayuda tengo oracle 10g sobre linux..
El parámetro "open_cursors" si se define globalmente en el archivo del init. Ora, pero cuando me refiero a "per user" es que ese parámetro, por decir, si se define a 500, cada usuario que se conecta a la base tendrá 500 cursores disponibles para cada uno, de ahí que si tu aplicativo esta generando demasiados cursores, por cada usuario que se conecte puede llegar a ocupar el máximo de cursores permitidos y por ende influenciar el rendimiento de la base.
Para poder verificar los cursores abiertos por usuarios, puedes hacer la siguiente consulta:
SELECT
sid, user_name, COUNT(*) "Cursors per session"
FROM v$open_cursor
GROUP BY sid, user_name;
De ahí puedes ir rastreando el usuario que consume más cursores y ver el aplicativo que ocupa ese usuario. Para revisar el aplicativo, primero ¿en qué esta desarrollado? Y luego se pudiera ver como manejas las consultas.
Ejecute el select pero más o menos sale un promedio de 60 cursores por session son 196 sessiones, en los parámetros de la bd esta seteado open_cursors a 300 entonces estaría bien no entiendo porque sale ese error DATABASE Limits Current Open Cursors Count IS AT 1221, gracias amigo cada vez me ah aclaras más el panoram muchas gracias
Esta muy interesante tu problema; tal vez me puedas dar otros detalles como en que momento te envía ese error o si te envía algún código adicional, algún ORA-xxxx, ya que la consulta que hablamos antes es bastante dinámica y es probable que en ese momento no te envíe la alerta que mencionas.
Existen otros parámetros asociados a los cursores abiertos pero ya tiene que ver con la utilización de la SQL Área de la base de datos, existen parámetros como MAXOPENCURSORS, HOLD_CURSOR y RELEASE_CURSOR, los cuales también son parametrizables, pero seria de ver otros detalles.
Mira por lo general para bases con cierto grado de transacciones el valor que tiene de 300 me parece aceptable, aunque también recomiendan que si utilizas aplicaciones en Forms, Reports, etc el valor este entre 500-1000, como te menciono anteriormente este valor es un poco difícil determinarlo ya que es bastante dinámico, pero pienso que al tener 196 usuarios tu base tiene cierto grado de transaccionabilidad (¿existe esa palabra?, bueno la idea es esa), tal vez pudieras aumentarlo un poco más y estar monitoreandolo.
Buena Suerte.
Gracias por tu ayuda cada vez, aprendo más muchas gracias de verdad, me puse a monitorear de nuevo me salio el mensaje y fui a ver las recomendaciones y esto es lo que me recomiendan:
The value of parameter "open_cursors" was "300" during the analysis period.
Rationale The value of parameter "session_cached_cursors" was "20" during the analysis period.
Consider increasing the maximum number of open cursors a session can have by increasing the value of parameter "open_cursors".
Action Consider increasing the session cursor cache size by increasing the value of parameter "session_cached_cursors".
El session_cached_cursors si no me equivoco se encarga de matener en memoria 20 cursores a cuanto lo incremento a 500 estaria bien y session_cached_cursors a 40, cual seria mas apropiado y que no me baje la perfomance.
Muchas Gracias amigo...
Saludos
Excelente, veo que también has estado realizando otros monitoreos e investigaciones, es la única forma de aprender, no creas igual siento que a mi me falta conocer muchas cosas, pero ahí vamos.
Bueno, considero que es más apropiado aumentar el open_cursors, éste parámetro de cierto modo no afecta tanto el rendimiento como el session_cached_cursors, ya que este ultimo si involucra el espacio de la memoria de la base y si es justo lo que tu mencionas, si es que en algún momento lo llega a ocupar todo, mientras que el otro y como has monitoreado no esta llegando siempre a su limite para la mayoría de sesiones; entonces necesariamente aumenta el open_cursor a 500 o aun un poco más 700 u 800, y podrías también aumentar el session_cached_session paulatinamente, prueba con 30 y monitorea el rendimiento, aun 40 seria un valor adecuado.
Sabes que me parece un poco raro y curioso el valor que te envía el error de 1221, y pudiera ser que de cierto modo es la cantidad de cursores que intenta utilizar, es una idea que me da pero no estoy seguro.
Tal vez pudieras darme otros datos respecto a la base y del equipo sobre el que corre, o en que esta desarrollado el aplicativo para considerar otros puntos o seguir con los parámetros y si se están elevando mucho.
Suerte.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas