Here is a non-exhaustive list of recommendations to get better performance:
- For VCS Repository (SQL backend):
- Check that common properties 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 = 0
clause. - 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. You can trace the slow NXQL queries using NXP-14845.
- 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 (NXP-25587).
Tune the Elasticsearch settings and mappings:
- Remove the
html_strip
char filters if not needed (on repository and audit index), its indexing cost is high on CPU. - Remove the
ecm:binarytext
fulltext index if highlights are no needed.
- Remove the
- Disable audit log on loginSuccess (see the perf template above).
- 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.