couchdb-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jan Lehnardt (JIRA)" <>
Subject [jira] Commented: (COUCHDB-271) preventing compaction from ruining the OS block cache
Date Sat, 28 Feb 2009 09:10:12 GMT


Jan Lehnardt commented on COUCHDB-271:

The best way to get any patch into OTP is coming up with a patch to send to erlang-patches@.
If we manage to find cross-platform alternatives and a non-intrusive patch, I'd assume a high
chance of Ericsson accepting the patch.

We could make it easy and label the patch Linux-only, but we might as well do some research
for at least Windows, Solaris, the BSD's and Darwin.

Once included and released with OTP, we'd bump the minimum required version.

If either the patch gets rejected or want to support older OTP releases, we should look into
the external daemon variant.

> preventing compaction from ruining the OS block cache
> -----------------------------------------------------
>                 Key: COUCHDB-271
>                 URL:
>             Project: CouchDB
>          Issue Type: Improvement
>          Components: Database Core
>    Affects Versions: 0.8.1, 0.9
>            Reporter: Jan Lehnardt
> Adam Kocolosk:
> Hi, I've noticed that compacting large DBs pretty much kills any filesystem caching benefits
for CouchDB.  I believe the problem is that the OS (Linux 2.6.21 kernel in my case) is caching
blocks from the .compact file, even though those blocks won't be read again until compaction
has finished.  In the meantime, the portion of the cache dedicated to the old DB file shrinks
and performance really suffers.
> I think a better mode of operation would be to advise/instruct the OS not to cache any
portion of the .compact file until we're ready to replace the main DB.  On Linux, specifying
the POSIX_FADV_DONTNEED option to posix_fadvise() seems like the way to go:
> This link has a little more detail and a usage example:
> Of course, POSIX_FADV_DONTNEED isn't really available from inside the Erlang VM.  Perhaps
the simplest approach would be to have a helper process that we can spawn which calls that
function (or its equivalent on a non-Linux OS) periodically during compaction?  I'm not really
sure, but I wanted to get this out on the list for discussion.  Best,

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message