我正在调试系统中的磁盘空间问题,发现.jdb文件占用了大部分空间。
在浏览时,找到此链接https://backstage.forgerock.com/knowledge/kb/article/a14630082,在我的情况下,lnSizeCorrectionFactor约为1.4,fileDeleted = false。 我运行了disk space命令以查找空间利用率,结果发现所有jdb文件的利用率都不为零,但是大多数文件的利用率均为2到9之间的个位数。
我使用的不是je-5.0.58版本。我的问题是根据BDB文档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
答案 0 :(得分:0)
如ForgeRock文档中所述,这是由于BDB JE版本5中的一个错误,该错误已在版本6和更高版本中得到解决。
引用BDB JE 6.x发行说明:
对日志利用率的计算进行了改进,以避免 清洁不足或过度清洁。例如,当日志利用率为 估计低于实际利用率,不必要 会发生过度清洁,这可能会降低性能。或登录时 利用率估计高于实际利用率, 清理不足将阻止回收未使用的磁盘空间。阻止 这些问题之后,每个已记录记录的大小现在都存储在 Btree BIN(内部内部节点),因此可以利用 在记录更新和删除期间正确计算,但仍然 避免获取旧版本的记录。有了这个改变, 日志清理器中的利用率调整工具 试图通过估计利用率来补偿此问题, 大多数应用程序不再需要。
因此,EnvironmentConfig.CLEANER_ADJUST_UTILIZATION参数 现在默认为false而不是true,并且将被禁用 完全在JE的未来版本中。有关更多信息,请参见 此参数的javadoc。
[#22275](6.0.7)