我正在调试系统中的磁盘空间问题,发现.jdb文件占用了大部分空间。

在浏览时,发现此链接https://backstage.forgerock.com/knowledge/kb/article/a14630082,在我的情况下,lnSizeCorrectionFactor约为1.4,fileDeleted = false。
我运行了disk space命令以查找空间利用率,结果发现所有jdb文件的利用率都不为零,但是大多数文件的利用率均为2-9之间的个位数。

我使用的不是je-5.0.58版本。我的问题是根据BDB doc https://docs.oracle.com/cd/E17277_02/html/GettingStartedGuide/backgroundthreads.html#cleaner,如果jdb文件小于默认值50%,则需要对其进行清理。就我而言,即使它们只有一位数,为什么还不清洗它们?

我没有明确设置任何环境配置,因此它应按定义使用默认值。下面是创建bdb存储库的代码。

 private static Repository createBDBRepository(File environmentHome) throws
 RepositoryException {
            BDBRepositoryBuilder builder = new BDBRepositoryBuilder();
            builder.setName("localbdb");
            builder.setEnvironmentHomeFile(environmentHome);
            builder.setTransactionNoSync(false);

            // Set BDB-JE flavor
            builder.setProduct("JE");

            builder.setCacheSize(20 * 1024 * 1024L);
            return builder.build();
    }


je.info文件中的日志行

   Chose lowest utilized file for cleaning. fileChosen: 0x50cbecc totalUtilization: 49 bestFileUtilization: 8 lnSizeCorrectionFactor: 1.1012049 isProbe: false
   No file selected for cleaning. totalUtilization: 50 bestFileUtilization: 8 lnSizeCorrectionFactor: 1.1012049 isProbe: false

最佳答案

正如ForgeRock文档所描述的,这是由于BDB JE版本5中的一个错误所致,该错误已在版本6及更高版本中得到解决。

引用BDB JE 6.x发行说明:


  对日志利用率的计算进行了改进,以避免
  清洁不足或过度清洁。例如,当日志利用率为
  估计低于实际利用率,不必要
  会发生过度清洁,这可能会降低性能。或登录时
  利用率估计高于实际利用率,
  清理不足将阻止回收未使用的磁盘空间。阻止
  这些问题之后,每个记录记录的大小现在都存储在
  Btree BIN(内部内部节点),因此可以利用
  在记录更新和删除期间正确计算,同时
  避免获取旧版本的记录。有了这个改变,
  日志清理器中的利用率调整工具
  试图通过估计利用率来补偿此问题,
  大多数应用程序不再需要。
  
  因此,EnvironmentConfig.CLEANER_ADJUST_UTILIZATION参数
  现在默认为false而不是true,并且将被禁用
  完全在JE的未来版本中。有关更多信息,请参见
  此参数的javadoc。
  
  [#22275](6.0.7)

关于java - 伯克利DB JE JDB文件不断增加,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53721182/

10-12 04:08