Full_Name: Dimitrij Denissenko
Version:
OS: Ubuntu 12.04
URL:
Submission from: (NULL) (62.30.100.0)
Hi,
I found an interesting issue with LMDB. I have populated the DB with a bunch of
records and it uses ~30M on disk (after sync). Then I added a background process
to my app and populated the database again with the same record set.
Surprisingly. the resulting size on disk was >70M.
The background process is forked periodically to perform some maintenance tasks,
here is my (simplified) code:
/* Close env before forking */
mdb_env_close(env);
if ((childpid = fork()) == 0) {
/* Child */
rc = mdb_env_open(env, ".", MDB_NOSYNC, 0644);
...
} else {
/* Parent */
rc = mdb_env_open(env, ".", MDB_NOSYNC, 0644);
...
}
I could narrow it down to the mdb_env_open call in the child. If I add exit(0)
before the mdb_env_open line, the DB size remains consistently at ~30M. The data
size seems to grow proportionally to the number of forks performed during data
load. What could be causing the growth? What can I do to prevent it?
Thanks in advance
PS: I tried it with MDB_FIXMAP and without, same result.