提升Elasticsearch性能的一些经验

2023-12-21 16:43:10
  • 分片查询缓存(Shard Request Cache)

ES 层面的缓存实现,封装在 IndicesRequestCache 类中。缓存的 Key 是整个客户端请求,缓存内容为单个分片的查询结果。主要作用是对聚合的缓存,查询结果中被缓存的内容主要包括:Aggregations(聚合结果)、Hits.total、以及 Suggestions等。

并非所有的分片级查询都会被缓存。只有客户端查询请求中 size=0 的情况下才会被缓存。其他不被缓存的条件还包括 Scroll、设置了 Profile 属性,查询类型不是 QUERY_THEN_FETCH,以及设置了 requestCache=false 等。另外一些存在不确定性的查询例如:范围查询带有 Now,由于它是毫秒级别的,缓存下来没有意义,类似的还有在脚本查询中使用了 Math.random() 等函数的查询也不会进行缓存。

当有新的 Segment 写入到分片后,缓存会失效,因为之前的缓存结果已经无法代表整个分片的查询结果。所以分片每次 Refresh 之后,缓存会被清除。

  • 节点查询缓存/过滤器缓存(Node Query Cache /Filter Cache)

Lucene 层面的缓存实现,封装在 LRUQueryCache 类中,默认开启。缓存的是某个 Filter 子查询语句在一个 Segment 上的查询结果。

文章来源:https://blog.csdn.net/yonggeit/article/details/135132475
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。