Berkeley DB JE JDB 文件不断增加

Posted

技术标签:

【中文标题】Berkeley DB JE JDB 文件不断增加【英文标题】:Berkeley DB JE JDB files keep increasing 【发布时间】:2018-12-11 09:35:16 【问题描述】:

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

在浏览时,发现此链接https://backstage.forgerock.com/knowledge/kb/article/a14630082,在我的情况下,lnSizeCorrectionFactor 约为 1.4 并且 fileDeleted=false。 我运行磁盘空间命令来查找空间利用率,结果证明所有 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

【问题讨论】:

【参考方案1】:

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

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

对日志利用率的计算进行了改进,以避免 清洁不足或过度清洁。例如,当日志利用率为 估计低于实际利用率,没必要 会发生过度清洁,这可能会降低性能。或者当登录 估计利用率高于实际利用率, 清洗不足会阻止回收未使用的磁盘空间。阻止 这些问题,每个记录的记录的大小现在存储在 Btree BINs(底部内部节点),因此利用率可以 在记录更新和删除期间正确计算,同时仍然 避免获取旧版本的记录。有了这个变化, 日志清理器中的利用率调整工具,它 试图通过估计利用率来弥补这个问题,是 大多数应用程序不再需要。

因此 EnvironmentConfig.CLEANER_ADJUST_UTILIZATION 参数 现在默认为 false 而不是 true,并且将被禁用 完全在 JE 的未来版本中。有关详细信息,请参阅 这个参数的javadoc。

[#22275] (6.0.7)

【讨论】:

以上是关于Berkeley DB JE JDB 文件不断增加的主要内容,如果未能解决你的问题,请参考以下文章

Berkeley DB 错误:无法锁定 je.lck 文件

berkeley-db-je 的最新版本是啥?

在 Berkeley DB Core 和 Berkeley DB JE 之间进行选择

在 Berkeley DB JE 中进行比较和交换?

Berkeley DB 文件压缩

我可以使用 oracle berkeley db java edition 的 c 实现(python bsddb)创建的 bdb(berkeley db)文件吗?