HSQLDB超时将大型数据库从1.8升级到2.4.1

时间:2018-11-09 00:12:01

标签: java hsqldb

因此,我继承了一个在HSQLDB 1.8.0.10 上运行的旧应用程序,该应用程序在断电后偶尔会出现恢复问题。随着过去10年对稳定性和持久性的所有改进,我正在考虑将其升级到最新的 2.4.1

我有多个数据库可以测试。从几KB到最大 2GB

为容量为 270MB 第二大数据库服务(不幸的是,几乎是下一个大小的十分之一)。但是,在 2GB 文件上启动服务器会导致HSQL永远坐在那里试图加载文件。

这不是v1.8的问题,它在很短的时间内就很容易就开始了。在v2.4上,我等待了长达10分钟的时间,然后放弃了(即使它在10m内能正常工作,让服务器花费这么长的时间启动还是很不可接受的。)

我尝试打开跟踪:

HsqlProperties p = new HsqlProperties();
p.setProperty("server.database.0", "db/TheDb");
p.setProperty("server.dbname.0", "TheDb");
p.setProperty("server.port", port);
p.setProperty("server.silent", "false");
p.setProperty("server.trace", "true");
Server server = new Server();
server.setProperties(p);
server.start();

结果如下:

: run() entered
  ...
: server.root=.
: openServerSocket() entered
: Got server socket: ServerSocket[addr=0.0.0.0/0.0.0.0,localport=37011]
: Server socket opened successfully in 6 ms.
: openServerSocket() exiting
: openDatabases() entered
: Opening database: [file:db/TheDb]
// Stuck here forever

该数据库由以下文件组成:

$ ls
 417028772  TheDb.backup
2147483608  TheDb.data
    430165  TheDb.log
       444  TheDb.properties
    196938  TheDb.script

.properties文件当前如下:

#HSQL Database Engine 1.8.0.10
hsqldb.script_format=0
runtime.gc_interval=0
sql.enforce_strict_size=false
hsqldb.cache_size_scale=8
readonly=false
hsqldb.nio_data_file=true
hsqldb.cache_scale=14
version=1.8.0
hsqldb.default_table_type=cached
hsqldb.cache_file_scale=1
hsqldb.log_size=200
modified=no
hsqldb.cache_version=1.7.0
hsqldb.original_version=1.8.0
hsqldb.defrag_limit=50
hsqldb.compatible_version=1.8.0

.script文件中未设置任何属性。 (在其他成功升级的数据库中,我确实注意到道具大多从.properties移到.script中)

我想知道是否有人对大型v2之前的文件执行过类似的壮举和/或看到类似的行为。加载数据文件时,是否有办法在跟踪中具有更高的可见性以发现问题?

谢谢。

1 个答案:

答案 0 :(得分:1)

建议在使用数据库引擎2.x版打开数据库之前,先对1.8版执行SHUTDOWN SCRIPT。使用此方法以2.x版格式重新生成数据文件。这需要很长时间,但未来的创业公司会很快。