Elasticsearch性能优化全解析
1. 使用doc值优化查询
在Elasticsearch中,缓存是提升性能的常见手段,但并非万能。当数据变化迅速且查询独特不可重复时,缓存可能无助甚至降低性能。
1.1 字段数据缓存问题
缓存的基本原理是将部分数据存于内存以提高性能,避免从慢速源(如磁盘)获取或重新计算数据。然而,缓存有代价,在Elasticsearch中主要是内存成本。以用于排序或聚合的字段数据缓存为例,为使功能正常工作,Elasticsearch需将给定字段的所有值反置并放入缓存。若文档数量多且分片大,可能导致内存问题,如查询时出现如下错误响应:
{ "error": "ReduceSearchPhaseException[Failed to execute phase [fetch], [reduce] ; shardFailures {[vWD3FNVoTy- 64r2vf6NwAw][dvt1][1]: ElasticsearchException[Java heap space]; nested: OutOfMemoryError[Java heap space]; }{[vWD3FNVoTy- 64r2vf6NwAw][dvt1][2]: ElasticsearchException[Java heap space]; nested: OutOfMemoryError[Java heap space]; }]; nested: OutOfMemoryError[Java heap space]; ", "status": 500 }