[Date Prev][Date Next] [Chronological] [Thread] [Top]

Re: (ITS#7651) LMDB: Uncontrolled database when opened from multiple processes



Makes sense, but out of interest: shouldn't the file size drop again, 
when locked pages are released?

On 31/07/13 15:34, Howard Chu wrote:
> dimitrij.denissenko@blacksquaremedia.com wrote:
>> Hi again,
>>
>> I was able to recreate the scenario in a test case. I must have mixed
>> something up previously. After more tests it seems that the memory
>> growth only appears when transactions are reset within the child.
>>
>> Here's the full code:
>> https://gist.github.com/dim/6122131
>>
>> Output on my machine:
>>
>> $ rm -f testdb/* && mkdir -p testdb && make mtest8 && ./mtest8
>> gcc -pthread -O2 -g -W -Wall -Wno-unused-parameter -Wbad-function-cast
>> -c mtest8.c
>> gcc -pthread -O2 -g -W -Wall -Wno-unused-parameter -Wbad-function-cast
>> mtest8.o liblmdb.a  -o mtest8
>> NO FORK     : 1699840
>> FORK & OPEN : 1699840
>> FORK & COPY : 6225920
>
> This behavior is expected. Your child process is holding a read txn 
> while it performs the env_copyfd(). During that time writers are not 
> able to reuse old data pages, so all writes consume new pages. When 
> the copyfd completes and releases its read txn the writers will resume 
> reusing old pages.
>
> There's no bug here, this ITS will be closed.
>