【问题标题】:In-memory log buffer size in BerkeleyDB-Core-JAVABerkeleyDB-Core-JAVA 中的内存日志缓冲区大小
【发布时间】:2011-07-12 08:26:50
【问题描述】:

我在 Berkeley BerkeleyDB-Core-JAVA 版本中使用内存日志缓冲区。 我有 9 个缺少记录的 CDRFile。 当我在持久数据库环境中的数据库中写入 CDRFile(即创建日志文件)时,会创建总共 1.08gb 的日志文件,并且当我在内存日志缓冲区中设置这两个参数时:

envconfig.setLogInMemory(true);
envconfig.setLogBufferSize(1181116006); // 1.10 gb

我收到如下错误:

-------------------------error----------------
PANIC: Not enough space
PANIC: DB_RUNRECOVERY: Fatal error, run database recovery
unable to join the environment
DataBase Exceptioncom.sleepycat.db.RunRecoveryException: DB_RUNRECOVERY: Fatal error,
run database recovery: PANIC: DB_RUNRECOVERY: Fatal error, run database recovery
unable to join the environment: DB_RUNRECOVERY: Fatal error, run database recovery
Writing DataBase Exception--->java.lang.NullPointerException
 ------------------------------error----------------------

所以我认为如果在磁盘上创建 1 GB 的文件日志,那么我必须在缓冲内存中也为日志文件设置 1 GB 的空间。

【问题讨论】:

    标签: java berkeley-db


    【解决方案1】:

    此类问题通常可以在 Berkeley DB forum(用于 Berkeley DB 核心)或 Berkeley DB Java 版forum(用于 OTN 上的 BDB JE)上更快地得到解答。

    根据您的错误消息,您似乎正在通过 Java API 使用 Berkeley DB(核心)。我的猜测是您的日志缓冲区空间不足。在 Berkeley DB 中,内存中日志缓冲区的默认大小为 1MB。您可以通过在 C 中调用 DB_ENV->set_lg_bsize() 或在 Java 中调用 setlogBufferSize 来将日志缓冲区扩展为更大。否则,您可以将事务分成更小的块,这样您就不会超过单个事务中日志缓冲区的大小。

    如果您不在内存中创建日志文件、使用较小的事务或分配了较大的内存日志缓冲区,您是否会遇到此问题?

    我希望这会有所帮助。

    问候,

    戴夫

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-15
      • 1970-01-01
      • 2015-02-16
      • 1970-01-01
      • 2011-02-08
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多