Recently we upgraded our elasticsearch instance from version 1.5 to version 5.2 and we have noticed significant increases in the response times of our application calls to elasticsearch for document updates. The client we use for making these updates is a org.elasticsearch.client.Client instance and the way we use it for making the updates is this:
client.prepareUpdate(...) .setScript(new Script(ScriptType.INLINE, Script.DEFAULT_SCRIPT_LANG, ...)) .setUpsert(theUpsertDoc) .setRetryOnConflict(3) .get();
When running with elasticsearch 1.5, the average response time of this call was approximately 3-5 milliseconds per request, using 150 concurrent threads. After the elasticsearch upgrade to 5.2 the average response time of this call with the same concurrency level (150 threads) increased to 50 milliseconds per request. It's worth to mention that in our initial load tests this average was at about 85 milliseconds per request, and after changing the index setting transcript.durability to async we saw that the time was improved to 50 milliseconds per request. Furthermore, it seems that this performance issue manifests itself when the request concurrency is high.
Given the above situation, we would like to see our possible options on how to handle this performance degradation issue. Are there any configuration tweaks we can make either on the server side or the client side to improve this performance issue? Also, is there some explanation why the performance of the above request we are using degraded so much after the upgrade to 5.2?