2

我们正在运行一个简单的多线程 Java 应用程序,它使用 Berkeley-DB 数据库进行存储。大约有 500 个线程,每个线程都有自己的 Berkeley-DB 数据库——每个数据库大约有 100K 的值键对。所有数据库都是事务性的,每个事务最多有大约 1000 个操作。没有长时间运行的事务。

问题是,有时在重新启动我们的应用程序时,Berkeley-DB 的恢复需要很长时间。在恢复期间(打开环境),我们看到 java 进程正在以 ~100MB/s 的速度从磁盘读取。没有写 - 只是阅读。

我们的设置是这样的:

je.env.runCheckpointer=true
je.env.runCleaner=true
je.checkpointer.highPriority=true
je.cleaner.threads=256
je.cleaner.maxBatchFiles=10
je.log.checksumRead=false
je.lock.nLockTables=353
je.maxMemory=16106127360
je.log.nDataDirectories=256

我们还尝试每 15 分钟手动运行一次检查点(假设检查点可能会停止或其他情况)。我们也设置了setMinimizeRecoveryTime(true)。但没有帮助。

我们假设问题可能出在一些 java 或 Berkeley DB 配置上。

有没有办法在牺牲放入数据库的速度的同时确保更快的恢复时间?

4

0 回答 0