我正在使用H2数据库 - 以嵌入模式运行 - 当我的应用程序启动时,我使用来自mySQL数据库的数据加载H2数据库。我正在使用链接表指向mySQL表。
我的问题是我正在努力加快H2在表格上创建索引的时间,特别是对于较大的表格(5Million +)。
当我将下一个表的数据加载到H2时,是否有人知道在单独的线程中运行CREATE INDEX命令是否安全? 例如: 线程1:加载表1 - >告诉线程2开始创建索引,然后线程1加载表2等
加载表时我不能使用MVCC模式,因为稍后我需要在选择时使用MULTI_THREADED模式。当我尝试使用MULTI_THREADED模式时,即使我将数据加载到离散表中,我也会遇到锁定错误。
非常感谢!
答案 0 :(得分:2)
什么可行(但我不确定它是否更快)是首先创建表和索引,然后并行加载表。这应该避免系统表中的锁定问题。
答案 1 :(得分:0)
我还想在获取表的结果集后添加方法rst.findColumn(“columnName”)来查找索引。 rst是ResultSet对象。这就是我用过的。
答案 2 :(得分:0)
显着改善H2加载,尤其是索引性能的另一种方法是将初始内存设置为接近预期的内存要求。作为一个例子,这一次更改允许具有大约1.5GB要求的应用程序在47秒内启动而不是在15-20分钟后失败。在此之前,我们看到超出了GC Overhead限制和JVMTI错误。
将以下内容添加到VM参数中(作为示例):
-Xms2g
-Xmx4g