BerkeleyDB-Core-JAVA中的内存日志缓冲区大小

时间:2011-07-12 08:26:51

标签: java berkeley-db

我在Berkeley BerkeleyDB-Core-JAVA版本中使用内存中的日志缓冲区。 我有CDRFile的9缺乏记录。 当我在持久数据库环境中的数据库中编写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的文件日志,那么我必须在缓冲存储器中为日志文件设置1GB的空间。

1 个答案:

答案 0 :(得分:0)

对于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来扩展日志缓冲区。否则,您可以将事务拆分为较小的块,以便在单个事务中不超过日志缓冲区的大小。

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

我希望这会有所帮助。

此致

戴夫