Here is a non-exhaustive list of recommendations to get better performance:
- For VCS Repository (SQL backend):
- Check that common schemas are set as prefetched (see org.nuxeo.ecm.core.schema.TypeService--configuration and org.nuxeo.ecm.core.schema.TypeService--doctype).
- If you don't want to match proxies in your query, add a
AND ecm:isProxy = 0clause. - If you don't use proxies at all, deactivate them at the repository level by adding inside the
<repository>element the following:<proxies enabled="false"/> - if possible disable the ACL optimization, look at the perf template for more information.
- If you are doing an NXQL query that involves custom schemas, you may need to add custom indexes to make the request efficient.
- Try to switch all page providers to Elasticsearch.
- Use groups to manage ACLs. Adding a user to a group is free, but adding a user in an ACL at the document root level has a cost because optimized read ACLs need to be recomputed for all documents under the root.
- Disable listeners that are not used (see the perf template above).
- Use BIGINT document identifier instead of default UID. This is done by adding a
<idType>sequence</idType>in the repository contribution.
Turn the Elasticsearch translog to async for all index.
Tune the Elasticsearch settings and mappings:
- Remove the
html_stripchar filters if not needed (on repository and audit index), its indexing cost is high on CPU. - Remove the
ecm:binarytextfulltext index if highlights are no needed.
- Remove the
- Disable audit log on loginSuccess (see above perf template).
- Increase the audit writer batch size (
nuxeo.stream.audit.batch.size).
- Consider disabling the OS swapping (
sudo swapoff -a) or try to lower the swappiness (vm.swappiness=1).
- Check the network latency between the application and the database.
- Configure ImageMagick to use a single thread.
- Monitor everything: JVM, GC, VCS cache hit ratio, database, system.