sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo manejar grandes transacciones bajo Oracle?

Oracle crea un cursor para cada conjunto de resultados y lo libera al cerrar el conjunto de resultados (jdbc ResultSet.close() o similar). El valor predeterminado de 50 cursores abiertos por sesión es suficiente para cualquier aplicación bien diseñada (una vez que lo medí, y en el modo de producción nunca superó los 20).

Debe verificar cómo hacer que Hibernate cierre los conjuntos de resultados después de la recuperación. En general, no puedo imaginar qué debería hacer la sesión si realmente requiere 1000 cursores abiertos. Nunca vi max_open_cursors más de 1000 configurados, así que supongo que también es suficiente para aplicaciones mal diseñadas (pero... no hay límite para la perfección de hecho, y nunca uso Hibernate).

Cada cursor significa algo de memoria, por lo que aumentar max_open_cursors no es una solución de precio cero.