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

Asignación de memoria Oracle JDBC al obtener un conjunto de resultados

Controlador Oracle Database JDBC, versiones anteriores a la 12:

El controlador asigna el tamaño máximo para cada columna multiplicado por el número de filas en el fetchSize antes de ejecutar la consulta.

Por ejemplo, para un VARCHAR(4000) columna asignará 8k bytes veces el fetchSize .


versiones 12 (y posteriores):

Asigna aproximadamente 15 bytes por columna por fila en el fetchSize antes de ejecutar la consulta. Después de la ejecución, el controlador en la versión 12 asigna solo lo necesario para almacenar los datos de fila reales.

Como resultado, los controladores de la versión 12 suelen utilizar bastante menos memoria que los controladores de las versiones anteriores.


Tu ejemplo :

En su ejemplo, un VARCHAR(20) puede ser tan grande como 40 bytes, un NUMBER puede ser tan grande como 22 bytes y un VARCHAR(100) tan grande como 100 bytes. Con el fetchSize establecido en 100, los controladores más antiguos asignarían (40 + 22 + 100) * 100 = 16k . El controlador de la versión 12 asignaría 3 * 15 * 100 = 4.5k . Hay una sobrecarga adicional en ambos controladores que estoy ignorando.