Michael Ströder wrote:
On 3/24/21 4:35 PM, Howard Chu wrote:
> Jean-Charles ROGEZ wrote:
> This is a known limitation with regard to frequent updates of large entries, it
causes
> excessive fragmentation of the free page space.
Does this also happen in case the LDAP client only changes a few
attribute values of a large entry? If yes, the original poster could
mitigate the bad effects by changing the sync process.
Yes it makes no difference since by default, back-mdb stores all entries as
single blobs. Thus the entire entry is always rewritten on any modification.
LMDB stores all records as a single contiguous set of pages, so the larger
the entry, the more contiguous pages it needs for storing them. Since the free
page manager in LMDB is extremely simplistic, it doesn't do well with random
allocations and deallocations of widely varying sizes, and so over time the
free space fragmentation gets worse, resulting in spans of pages that are too
small to service the requests for the larger entries.
The multival feature in OpenLDAP 2.5 back-mdb lets you configure some
attributes to have their values stored as individual DB records, which
then means that modifications of individual values don't have to rewrite
the entire entry. And with smaller records, the fragmentation issue goes away.
The tradeoff of course is that it takes multiple DB accesses to construct
an entry, so write performance improves at the cost of read performance.
There's no free lunch...
(Yes, the add request with initial attribute value set is expected to be
large. Also some subsequent modify requests in case of larger
reorganisations.)
Ciao, Michael.
--
-- Howard Chu
CTO, Symas Corp.
http://www.symas.com
Director, Highland Sun
http://highlandsun.com/hyc/
Chief Architect, OpenLDAP
http://www.openldap.org/project/