我正在使用可能相对较大的数据库文件的Berkeley DB(2.1 GiB,使用btree格式以防万一)。在应用程序关闭期间,调用DbEnv :: lsn_reset以便在退出应用程序之前“刷新”所有内容。对于大型数据库,这个例程对我来说需要很长时间 - 至少10分钟左右,在此期间会发生大量磁盘访问。
这是正常的还是以某种错误方式使用Berkeley DB的结果?有什么办法可以让事情变得更快吗?特别是,可以调整哪些参数来提高性能?
答案 0 :(得分:1)
DbEnv :: lsn_reset()可能不是你想要的。该函数重写数据库中的每个页面,以便您可以关闭数据库并在不同的环境中打开它们。它会写出至少2.1 GiB,并且非常缓慢。
如果您只是关闭应用程序以便稍后启动备份,您可能只是想要执行DbEnv :: txn_checkpoint()来刷新数据库日志并插入检查点记录。虽然,这也不是必需的。只要您将日志提交到稳定存储,您就可以退出应用程序。
http://docs.oracle.com/cd/E17276_01/html/api_reference/CXX/txncheckpoint.html