我在BerkeleyDB JE环境中有一个耦合的 main 和一个(临时和辅助)数据库。问题如下:
e.truncateDatabase(txn, name, false)
来执行此操作我如何真正擦除辅助数据库,以便释放磁盘空间?这也是一个性能问题,因为对于那些几GB的大型目录,BDB在启动和关闭时遇到严重问题。我可以强制BDB使用单独的文件,所以我只能删除一个特定的文件吗?
不知何故,这种单一环境似乎是问题的根源。例如,我希望通过提供辅助数据库setTxnNoSync()
来提高性能,但这也会影响主数据库。
如果我在aux DB上使用setTemporary
,我会收到运行时异常,显然不允许使用临时数据库的事务!?
java.lang.IllegalArgumentException:尝试打开Database aux,以下两个或多个以下独占属性为真:deferredWrite,temporary,transactional
答案 0 :(得分:0)
我通过以下设置改善了这种情况:
envCfg.setConfigParam(EnvironmentConfig.CLEANER_MIN_FILE_UTILIZATION, "33")
在应用程序启动时使用removeDatabase
而不是truncateDatabase
。至少我似乎不再能获得无限增长。
我仍然有兴趣听听我是否可以让BDB为这两个数据库使用专用日志文件。