2

我正在使用 H2 数据库 - 以嵌入式模式运行 - 当我的应用程序启动时,我使用来自 mySQL 数据库的数据加载 H2 数据库。我正在使用链接表来指向 mySQL 表。

我的问题是我试图加快 H2 在表上创建索引的时间,特别是对于较大的表(500 万+)。

有谁知道在我将下一个表的数据加载到 H2 时在单独的线程中运行 CREATE INDEX 命令是否安全?例如:线程 1:加载表 1 -> 告诉线程 2 开始创建索引,然后线程 1 加载表 2,等等。

加载表格时我不能使用 MVCC 模式,因为稍后我在进行选择时需要使用 MULTI_THREADED 模式。当我尝试使用 MULTI_THREADED 模式时,即使我将数据加载到离散表中,我也会遇到锁定错误。

非常感谢!

4

3 回答 3

2

什么可能有效(但我不确定它是否更快)是首先创建表和索引,然后并行加载表。这应该避免系统表中的锁定问题。

于 2013-02-15T08:49:02.103 回答
0

我还想添加方法 rst.findColumn("columnName") 以在获取表的结果集之后查找索引。rst 是一个 ResultSet 对象。这是我用过的。

于 2013-04-05T09:38:47.113 回答
0

另一种显着提高 H2 加载,尤其是索引性能的方法是将初始内存设置为接近预期的内存要求。举个例子,这一改变允许一个大约需要 1.5GB 的应用程序在 47 秒内启动,而不是在 15 到 20 分钟后失败。在此之前,我们看到超过 GC Overhead limit 和 JVMTI 错误。

将以下内容添加到您的 VM 参数中(例如):

 -Xms2g
 -Xmx4g
于 2017-10-09T23:18:54.477 回答