He observado el siguiente comportamiento.Java JDBC clearBatch() y la memoria del montón
Tengo un archivo de unos 3 MB que contiene varios miles de filas. En las filas, divido y creo una declaración preparada (alrededor de 250 000 declaraciones).
Lo que hago es:
preparedStatement
addBatch
do for every 200 rows {
executeBatch
clearBatch().
}
al final
commit()
El uso de memoria aumentará a alrededor de 70 MB sin error de falta de memoria. ¿Es posible bajar el uso de la memoria? y tienen el comportamiento transaccional (si uno falla, todos fallan). Pude bajar la memoria haciendo commit con executeBatch
y clearBatch
... pero esto causará una inserción parcial del conjunto total.
Esto podría ser muy dependiente de la calidad del controlador JDBC - cuál son estás usando? – skaffman
He cambiado de 200 filas a 10000 y el tiempo para ejecutar ahora es de 37 segundos. Parece que se usa el mismo tamaño. Estoy usando H2's org.h2.jdbcx.JdbcConnectionPool, los datos se almacenan como un archivo ... no en la memoria. Estoy intentando construir una aplicación local sin un servidor de base de datos como Oracle, MySQL, etc. – Firone
¿Está seguro de que el uso de memoria alta está relacionado con el procesamiento de la base de datos y no con la E/S de archivo de la importación? – Timothy