Elasticesearch内存详解(六)——Shard request cache

简介: 介绍Elasticesearch内存中的Shard request cache

1.简介

Shard Request Cache 简称 Request Cache,他是分片级别的查询缓存,每个分片有自己的缓存。该缓存采用 LRU 机制,缓存的 key 是整个客户端请求,缓存内容为单个分片的查询结果。如果一个客户端请求被数据节点缓存了,下次查询的时候可以直接从缓存获取,无需对分片进行查询。

结构:

final Key key =  new Key(cacheEntity, reader.getReaderCacheHelper().getKey(), cacheKey);

cacheEntity, 主要是 shard信息,代表该缓存是哪个 shard上的查询结果。

readerCacheKey, 主要用于区分不同的 IndexReader。

cacheKey, 主要是整个客户端请求的请求体(source)和请求参数(preference、indexRoutings、requestCache等)。由于客户端请求信息直接序列化为二进制作为缓存 key 的一部分,所以客户端请求的 json 顺序,聚合名称等变化都会导致 cache 无法命中。

缓存的 value比较简单,就是将查询结果序列化之后的二进制数据。

2.用途

Request Cache 的主要作用是对聚合的缓存,聚合过程是实时计算,通常会消耗很多资源,缓存对聚合来说意义重大。

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

该缓存使用LRU淘汰策略,内存无法被GC

1)默认被开启,ES6.71版本。

2)RequestCache作用域为Node,在Node中的Shard共享这个Cache空间。。

3)RequestCache 是以查询的DSL整个串为key的,修改一个字符和顺序都需要重新生成Cache

4)缓存失效是索引的refresh操作,也可以设置失效时间。

5)缓存的默认大小是JVM堆内存的1%,可以通过手动设置。

首先,我们按照 汽车的颜色color来划分桶

image.png

size: 查询条数,这里设置为0,因为我们不关心搜索到的数据,只关心聚合结果,提高效率

aggs:声明这是一个聚合查询,是aggregations的缩写

popular_colors:给这次聚合起一个名字,任意。

terms:划分桶的方式,这里是根据词条划分

field:划分桶的字段

3.设置

ES 默认情况下最多使用堆内存的 1% 用作 Request Cache,这是一个节点级别的配置:

indices.requests.cache.size

Request Cache 默认是开启的。你可以为某个索引动态启用或禁用缓存:

PUT /my-index/_settings
{ "index.requests.cache.enable": true }

或者在查询请求级别通过 request_cache 参数来控制本次查询是否使用 cache,他会覆盖索引级别的设置。

GET /my-index/_search?request_cache=true

相关文章
|
存储 缓存 自然语言处理
Elasticesearch内存详解
Elasticesearch内存详解总结文章
4153 0
Elasticesearch内存详解
|
6月前
|
存储 缓存 算法
内存系列学习(四):Cache和Write Buffer一般性介绍
内存系列学习(四):Cache和Write Buffer一般性介绍
267 0
|
6月前
|
缓存 Linux
ARM平台内存和cache对xenomai实时性的影响
ARM平台内存和cache对xenomai实时性的影响
144 0
ARM平台内存和cache对xenomai实时性的影响
|
6月前
|
存储 缓存
怎么理解内存中的Buffer和Cache?
怎么理解内存中的Buffer和Cache?
72 2
|
6月前
|
存储 算法 Linux
内存系列学习(五):ARM处理器中的Cache和Write Buffer
内存系列学习(五):ARM处理器中的Cache和Write Buffer
290 0
内存系列学习(五):ARM处理器中的Cache和Write Buffer
|
Shell
使用 shell 脚本清理内存 buff/cache
使用 shell 脚本清理内存 buff/cache
170 0
|
存储 缓存 算法
JVM虚拟机:内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)
JVM虚拟机:内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)
743 0
|
存储 缓存 固态存储
重学操作系统----05 | 存储器分级:L1 Cache 比内存和 SSD 快多少倍?
重学操作系统----05 | 存储器分级:L1 Cache 比内存和 SSD 快多少倍?
300 0
|
存储 缓存 BI
|
缓存 Linux Windows
Linux-手动释放linux内存cache
Linux-手动释放linux内存cache
158 0