Vladimír Čunát wrote:
> Hello.
> (I sent the same message 24h ago before subscribing, but it hasn't arrived so 
> far.  I hope you won't see a duplicate later.)
> 
> We have a process that needs to analyze the contents of a whole LMDB.  So far 
> the approach was to open a read-only transaction and use a cursor to iterate 
> over the whole contents in order.  This long transaction apparently causes 
> other concurrent process(es) to get MDB_MAP_FULL from mdb_put() even though 
> that LMDB has plenty free pages at that moment.
> 
> That would be a big problem for us, but fortunately we don't need the 
> analysis to be atomic and splitting that iterating into smaller transactions 
> seems to avoid the problem.  That were just experiments without understanding 
> why exactly it happens (though I get that long transactions are generally 
> problematic).
> 
> Could this behavior be considered a bug in LMDB?

It's a documented feature.

>  Is there a way of either distinguishing this MDB_MAP_FULL event from really 
> full LMDB or avoiding it with confidence?  (We only experimented with the 
> number of keys accessed in one transaction.)

Maybe in LMDB 1.x we'll have a way to minimize the problem. For now, this is 
how it works.
> 
> By the way, thanks a lot for LMDB!
> 
> --Vladimir
> https://knot-resolver.cz
> 


-- 
  -- Howard Chu
  CTO, Symas Corp.           http://www.symas.com
  Director, Highland Sun     http://highlandsun.com/hyc/
  Chief Architect, OpenLDAP  http://www.openldap.org/project/

Reply via email to