[py-lmdb] Re: Weird performance issues with LMDB

  • From: David Wilson <dw@xxxxxxxx>
  • To: py-lmdb@xxxxxxxxxxxxx
  • Date: Fri, 11 Oct 2019 18:15:22 +0000

This is often due to memory pressure randomly evicting a few pages from
cache, causing random IO to bring them back in when LMDB tries to read
from that page. Even with SSD this can result in major slowdowns
compared to an all-RAM run.

Especially on a shared machine this is quite possible.

You can diagnose it using a command like:

    /usr/bin/time -v python yourscript.py

It will report 3 important metrics:

    Major (requiring I/O) page faults: 0
    Minor (reclaiming a frame) page faults: 122
    File system inputs: 0

If memory pressure is the cause, IIRC on Linux the filesystem inputs
number will increase compared to an all-RAM run, but it is also possible
(depending on OS?) this will be reported as an increase in major faults.

In either case, expect these statistics to fluctuate a little even
during a healthy run.


On Fri, Oct 11, 2019 at 11:27:23AM -0600, Andrew Spott wrote:

Hi,

I'm running into a weird performance problem with LMDB.  Every once in a 
while,
when iterating over the whole thing, I'll have a major slowdown.  I go from 
70k
records per second, down to between a hundred and a few thousand records per
second.  This usually continues for the entire read, however, *sometimes* if I
restart the python kernel or restart the script, it will go back into high
speed mode.  I don't have any idea what might be causing this.

The machine is a shared machine, so it could be a resources thing, though a
cursory look at htop doesn't show excessive memory pressure or cpu usage.

Any ideas?  Places to look? I don't know how to investigate a memory mapping
performance issue... any suggestions?

Thanks,

-Andrew

Other related posts: