2012-03-21 22 views
5

Estoy trabajando en una aplicación Java utilizando la base de datos H2 en modo incrustado. Mi aplicación consume 150 MB de memoria del montón.Problemas de rendimiento utilizando H2 DB en modo incrustado con gran carga de datos en la base de datos

Problema: Pasos Cuando cargo la base de datos H2 con 2 mb de datos, el acceso a la base de datos es rápido y el tamaño de la memoria del montón 160mb.

Pero cuando cargo la base de datos H2 con 30 mb de datos (h2 tamaño del archivo db = 30 mb). Luego acceder a la base de datos desde mi aplicación es muy lento. La razón es que el tamaño de mi montón de aplicaciones ha crecido enormemente hasta los 300 MB de tamaño, por lo tanto, el rendimiento se ha degradado. Confirmé el uso de JConsole.

Entiendo que la base de datos H2 está desarrollada usando Java y como estoy utilizando la base de datos H2 en modo incrustado, el tamaño de pila de la base de datos H2 se agrega a mi aplicación que está rompiendo la aplicación.

El problema es que a medida que crece el tamaño de la base de datos H2, el rendimiento de mi aplicación se degrada.

¿Cómo resolver el problema?

he dado la conexión como

rurl = "jdbc:h2:file:/" + getDBPath() + dbname + ";CACHE_SIZE=" + (1024 * 1024) + ";PAGE_SIZE=512"; 

para aumentar el caché de H2.

+0

El tamaño de caché de una base de datos H2 persistente e incorporada es de 16 MB de forma predeterminada. ¿Utiliza una base de datos en memoria o una configuración de caché más alta? ¿Estás seguro de que el rendimiento se degrada debido al uso de la memoria de montón (porque esto es muy poco común) y verifica dónde está el problema de rendimiento (por ejemplo, jps -l/jstack -l )? –

+0

Ha utilizado el tamaño de la memoria caché y el tamaño de página no predeterminados. ¿Cuál es el motivo para no usar la configuración predeterminada? –

+0

¿Encontró una solución para esto? Estoy experimentando el mismo problema. La base de datos pequeña está bien, si inserto muchos datos en una tabla todas las consultas comienzan a tomar mucho más tiempo. – Gust

Respuesta

5

En la mayoría de los casos, los problemas de rendimiento no están realmente relacionados con el tamaño de la memoria caché o el tamaño de página. Para el análisis de los problemas de rendimiento, consulte la documentación de H2, especialmente:

Si configura manualmente el tamaño de la memoria caché en 1024 * 1024, H2 usará 1 GB de memoria dinámica. Esta configuración solo debe usarse si tiene más de 1 GB de memoria física disponible para la JVM (usando java -Xmx2048m o similar). De lo contrario, sugiero utilizar la configuración predeterminada (16 MB de tamaño de caché) en su lugar.

Usar un tamaño de página inferior al predeterminado puede disminuir el rendimiento. Esto depende del disco duro y, posiblemente, del patrón de acceso. Sin embargo, no hay una lista de reglas sobre cuándo usar un tamaño de página no predeterminado: la única manera de averiguarlo es probar diferentes configuraciones.

Cuestiones relacionadas