【发布时间】:2012-04-05 15:12:57
【问题描述】:
我正在使用嵌入式模式下的 H2 数据库处理 Java 应用程序。 我的应用程序消耗了 150mb 的堆内存。
问题: 脚步 当我用 2 mb 的数据加载 H2 数据库时,数据库访问速度很快,堆内存大小为 160 mb。
但是当我用 30 mb 的数据加载 H2 数据库时(h2 db 文件大小 = 30 mb)。然后从我的应用程序访问数据库非常慢。原因是我的应用程序堆大小大幅增长到 300mb,因此性能下降。我确认使用 JConsole。
所以我的理解是因为 H2 数据库是使用 java 开发的,并且由于我在嵌入式模式下使用 H2 数据库,所以 H2 数据库的堆大小被添加到我的应用程序中,这会破坏应用程序。
问题是随着 H2 数据库大小的增长,我的应用程序的性能会下降。
如何解决问题?
我已将连接设为
rurl = "jdbc:h2:file:/" + getDBPath() + dbname + ";CACHE_SIZE=" + (1024 * 1024) + ";PAGE_SIZE=512";
增加H2的缓存。
【问题讨论】:
-
持久性嵌入式 H2 数据库的缓存大小默认为 16 MB。您使用内存数据库还是更高的缓存设置?您确定性能会因为堆内存使用而降低(因为这种情况非常罕见),并且确实检查了性能问题出在哪里(例如 jps -l / jstack -l )?
-
您使用了非默认缓存大小和页面大小 - 不使用默认设置的原因是什么?
-
您找到解决方案了吗?我遇到了同样的问题。小型数据库很好,如果我将大量数据插入到一个表中,所有查询都会开始花费更长的时间。