Properties 截断hsqldb花费的时间太多

Properties 截断hsqldb花费的时间太多,properties,hsqldb,truncate,Properties,Hsqldb,Truncate,我使用的是HSQLDB2.3.2,我遇到了以下问题: 我的数据库缓存了包含10000条记录的表,没有任何约束和索引。其大小约为900mb。我关闭了自动提交模式,当我尝试执行“Truncate table name”时,执行会挂起,但只有dbName.backup在增长。原因如下: 跟踪引擎:?-copyShadow[大小、时间]2246252 9721跟踪 发动机:?-setFileModified标志集跟踪引擎:?-缓存保存 行[计数,时间]总计248019921操作248019921 txt

我使用的是HSQLDB2.3.2,我遇到了以下问题:

  • 我的数据库缓存了包含10000条记录的表,没有任何约束和索引。其大小约为900mb。我关闭了自动提交模式,当我尝试执行“Truncate table name”时,执行会挂起,但只有dbName.backup在增长。原因如下:
  • 跟踪引擎:?-copyShadow[大小、时间]2246252 9721
    跟踪 发动机:?-setFileModified标志集
    跟踪引擎:?-缓存保存 行[计数,时间]总计248019921操作248019921 txts 96
    跟踪引擎:?-copyShadow[大小、时间]4426920 7732
    跟踪 发动机:?-缓存保存行[计数,时间]总计4960917775操作 248087854 txts 96
    跟踪引擎:?-copyShadow[大小、时间] 65747969024

    大约需要1500-2000秒,最后我可以得到空表或异常,如下所示:

    Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1,525.509 sec
    org.apache.maven.surefire.util.SurefireReflectionException: java.lang.reflect.InvocationTargetException; nested exception is java.lang.reflect.InvocationTargetException: null
    java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164)
        at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110)
        at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175)
        at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107)
        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68)
    Caused by: java.lang.OutOfMemoryError: Java heap space
    
    删除截断后的dbName.backup。我不必在应用程序中使用任何备份,如何避免复制

  • dbName.properties不起作用。它包含以下文本:

    #HSQL数据库引擎2.3.2

    #2015年3月19日星期四08:42:10

    版本=2.3.2
    修改=否
  • 我试图追加
    hsqldb.applog=1
    ,但什么也没发生。
    dbName.app.log出现,以防您更改dbName.script中的
    SET DATABASE EVENT log LEVEL 1
    从我的应用程序使用数据库后,dbName.properties将被覆盖:“是”上的“修改”更改以及下面的任何行将被删除。我做错了什么

    我的数据库缓存了一个表,其中有10000条记录,没有任何 约束和索引

    没有任何约束和索引的大型表是错误的。此表上影响几行的任何SELECT、UPDATE或DELETE都必须搜索表中的所有行

    我尝试执行“截断表tableName”

    上面的语句允许您在提交之前回滚操作。用于回滚的信息存储在内存中,当表非常大时,内存将耗尽。如果确实要提交更改,请使用以下语句:

    TRUNCATE TABLE tableName AND COMMIT
    
    指南中提到了这一点:

    可以对.properties文件进行的唯一添加是将数据库文件设置为只读。任何其他更改都将被忽略并删除


    .backup文件供数据库引擎内部使用,您无法停止使用。

    Thx获取答案!你的陈述非常有效!顺便说一句,我稍后会添加约束,我现在不需要