在嵌入式模式下使用H2 DB的性能问题,数据库中的数据量很大

时间:2012-03-21 05:06:40

标签: h2 database-performance

我在嵌入式模式下使用H2数据库工作java应用程序。 我的应用程序消耗150mb的堆内存。

问题: 脚步 当我用2 MB的数据加载H2数据库时,数据库访问速度很快,堆内存大小为160mb。

但是当我用30 mb的数据(h2 db文件大小= 30 mb)加载H2数据库时。然后从我的应用程序访问数据库非常慢。原因是我的应用程序堆大小已经大大增加到300mb的大小因此降低了性能。我确认使用JConsole。

所以我的理解是因为H2数据库是使用java开发的,因为我在嵌入模式下使用H2数据库,H2数据库的堆大小被添加到我的应用程序中,这正在破坏应用程序。

问题是随着H2数据库大小的增长,我的应用程序的性能降低了。

如何解决问题?

我已将连接作为

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

增加H2的缓存。

1 个答案:

答案 0 :(得分:8)

在大多数情况下,性能问题实际上与缓存大小或页面大小无关。要分析性能问题,请参阅H2文档,特别是:

如果手动将缓存大小设置为1024 * 1024,则H2将使用1 GB堆内存。仅当JVM可用的物理内存超过1 GB(使用java -Xmx2048m或类似内容)时,才应使用此设置。否则,我建议使用默认设置(16 MB缓存大小)。

使用小于默认值的页面大小可能会降低性能。这取决于硬盘,也可能取决于访问模式。但是,没有规则列表何时使用非默认页面大小 - 找出的唯一方法是尝试不同的设置。