Hi Paul,

I don't think there is a clustered CouchDB book out there, and you've
probably already seen
http://docs.couchdb.org/en/stable/maintenance/performance.html.

The often overlooked aspect of performance tuning is that it starts
with application design. Things like how indices are defined, using
built-in reducers for map-reduce views, avoiding large document
bodies, IDs and attachments, adjusting the sharding factor (Q) and so
on. For that I can recommend this blog series
https://blog.cloudant.com/

In CouchDB 3.x there is an auto-index builder and an improved
compactor. Sometimes it's necessary to adjust those as they might add
unexpected load on the backend.

On the hardware / operational side, like most databases, CouchDB uses
fsync. So, make sure the IO layer can perform that operation well and
that the file system is POSIX compliant (NTFS, for instance, isn't).
On the networking side, make sure you have low latency and stable
links between your nodes.

In general, with larger Q values you'd benefit from more CPUs. If you
throw more memory at your nodes, you can increase
https://docs.couchdb.org/en/stable/maintenance/performance.html#max-dbs-open
to make sure you cache more opened db handles.

If you're feeling adventurous, you could try playing with compression
options. Snappy is the default compression mechanism in CouchDB but at
Cloudant we are using default_6 which is just the default erlang
term_to_binary compression. So here you can see if changing it makes
any difference.

Some of the Erlang VM parameters can be tuned in the vm.args file.
Here are some values I've seen used for larger clusters

```
+K true
+A32
+zdbbl32768
```

For these you can read general Erlang VM performance guides. If, by
chance, you're running your DB in kube, take a look at
https://adoptingerlang.org/docs/production/kubernetes/

Cheers,
-Nick




On Tue, Nov 23, 2021 at 3:39 AM Paul Milner <[email protected]> wrote:
>
> Hello
>
> Can someone recommend a book or website that can help me to understand
> optimising Couchdb and making it performant please?
>
> I've looked at Fabric, Erlang etc options, but would like to get an
> overview and deep understanding of how it works.
>
> I've also been through the documentation, but feel this would help.
>
> Thanks a lot
> Best regards
> Paul

Reply via email to