16 May ENDECA QUERY PERFORMANCE TUNING
Endeca Query Performance Tuning for optimal performance
To resolve Endeca Query Performance issues, we’ve listed a few solutions below:
The following patches need to be applied:
To reduce the number of supplemental objects that are returned by the queries, applying Patch 17342677 helps to improve performance. This applies to: ATG 10.1.2 and 10.2 and the corresponding Assembler 3.1.1 and 3.1.2.
To verify that the patch was correctly installed, make sure the request logs start including the following with the requests: &merchrulefilter=endeca.internal.nonexistent
Verify properties and dimension returned by Endeca query response:
Properties/Dimension can be set as part of the Endeca query fired by cartridge handlers. Cartridge handlers use /atg/endeca/assembler/cartridge/handler/config/ResultsListConfig.properties from ATG to pass it to Endeca. Endeca will return all properties if fieldNames property is null in the mentioned component.
Records Per Aggregate Record set to one
By default, record per aggregate is set to ALL in ATG and this would bring all records for rolled up records, including representative record.
Verify if Preview is not enabled in Production
/dyn/admin/nucleus/atg/endeca/assembler/cartridge/manager/AssemblerSettings: Verify if previewEnabled = false for production environment. Setting this to true will return back lots of merchandized rule data with the results. You can confirm this by looking at the Dgraph.reqlog, and looking for merchdebug=true in the queries.
Use Endeca user segments in multisite environment.
Content include cartridge makes a blanket query to Endeca to fetch all possible rules from dgraph for the given navigation state. This query would be found in the request log:
Using site user segment, always results in unwanted content as part of the above query and this increases the response size.
Don’t expose all dimensions
Never use ENEQuery.setNavAllRefinements(true). Using true would be very expensive in terms of response time, as well as size. Use UrlENEQuery.setNe() and pass in a string like “123+234+532”.
Looking through .reqlog, if you see &allgroups=1, this means somewhere someone has setNavAllRefinements(true).