我在嵌入式模式下使用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的缓存。
答案 0 :(得分:8)
在大多数情况下,性能问题实际上与缓存大小或页面大小无关。要分析性能问题,请参阅H2文档,特别是:
如果手动将缓存大小设置为1024 * 1024,则H2将使用1 GB堆内存。仅当JVM可用的物理内存超过1 GB(使用java -Xmx2048m
或类似内容)时,才应使用此设置。否则,我建议使用默认设置(16 MB缓存大小)。
使用小于默认值的页面大小可能会降低性能。这取决于硬盘,也可能取决于访问模式。但是,没有规则列表何时使用非默认页面大小 - 找出的唯一方法是尝试不同的设置。