【问题标题】:Performance issues using H2 DB in embedded mode with heavy load of data in database在嵌入式模式下使用 H2 DB 的性能问题,数据库中的数据负载很重
【发布时间】: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 )?
  • 您使用了非默认缓存大小和页面大小 - 不使用默认设置的原因是什么?
  • 您找到解决方案了吗?我遇到了同样的问题。小型数据库很好,如果我将大量数据插入到一个表中,所有查询都会开始花费更长的时间。

标签: h2 database-performance


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2011-01-27
    • 2014-10-11
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 2017-03-05
    • 2013-04-05
    • 2012-01-21
    • 2011-05-22
    相关资源
    最近更新 更多