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
