java - Berkeley DB JE JDB 文件不断增加
问题描述
我正在调试系统中的磁盘空间问题,发现 .jdb 文件占用了大部分空间。
浏览时,发现此链接https://backstage.forgerock.com/knowledge/kb/article/a14630082,在我的情况下,lnSizeCorrectionFactor 约为 1.4 并且 fileDeleted=false。我运行磁盘空间命令来查找空间利用率,结果证明所有 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
解决方案
正如 ForgeRock 文档所描述的,这是由于 BDB JE 版本 5 中的一个错误,该错误已在版本 6 及更高版本中得到解决。
引用 BDB JE 6.x 发行说明:
对日志利用率的计算进行了改进,以避免清洁不足或过度清洁。例如,当估计日志利用率低于实际利用率时,会发生不必要的过度清理,从而降低性能。或者当估计日志利用率高于实际利用率时,清理不足将阻止回收未使用的磁盘空间。为了防止这些问题,现在每个记录的记录的大小都存储在 Btree BIN(底部内部节点)中,以便在记录更新和删除期间可以正确计算利用率,同时仍然避免获取旧版本的记录。随着这一变化,日志清理器中的利用率调整工具试图通过估计利用率来弥补这个问题,
因此,EnvironmentConfig.CLEANER_ADJUST_UTILIZATION 参数现在默认为 false 而不是 true,并且将在 JE 的未来版本中完全禁用。有关详细信息,请参阅此参数的 javadoc。
[#22275] (6.0.7)
推荐阅读
- python - 使用按钮 tkinter 更改画布对象的颜色
- magento - Magento 1.9 cron 正在运行,但在一种方法上停止
- sqlite - 无法在 React-Native 中通过 RecyclerListView 显示 SQLite 表
- ionic-framework - 如何在 Ionic 中为“INR”货币运行我的 PayPal 代码
- python - Python 3:为什么循环比递归快?
- kubernetes - Kubernetes 丢失了 ~/.kube/config
- node.js - Express:会话秘密
- c - 如何在 ac 函数中返回通用指针?
- django - Django 使用包含文件字段的外部 postgresql 数据库
- r - Trying to install easyGgplot2 in R