is this parameter something that is passed to the mmap call?
https://man7.org/linux/man-pages/man2/mmap.2.html
could you share link to the code that uses this parameter? i'd like to understand how its used so i understand the perf implications (setting it too high than necessary).

On Tue, Sep 12, 2023 at 11:57 AM Howard Chu <hyc@symas.com> wrote:
Siddharth Jain wrote:
> Hello,
>
> can someone help me understand this parameter:
> http://www.lmdb.tech/doc/group__mdb.html#gaa2506ec8dab3d969b0e609cd82e619e5
>
> 1. why does a user need to specify this apriori? Other databases don't require user to declare the size of the db beforehand. its not something a user knows in
> advance.

It's not the size of the database. It's the maximum size the database will be allowed to grow to. Of
course you don't need to know the actual size of the DB in advance.

You ought to know how much storage you're willing to commit to the DB. At most, it is the size of the
free space on your storage device.

As for why: because setting the maximum size once, up front, gives higher performance than incrementally
growing during runtime. If you don't care about performance, and can't handle this question, use some other
slower DB.

> 2. quoting: "The size of the memory map is also the maximum size of the database.". what happens when the size of the db overflows this parameter?

It can't overflow. The DB will reject writes when it reaches that limit.

> 3. what is the trade-off if a user sets this parameter too large than is necessary?

The map just uses virtual address space, which is limited to 128TB on current 64bit CPUs.
If you try to use all of that up, you won't have space for shared libraries in that process.
>
> S.


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