如何解决即使设置了request_cache = true,我也看不到昂贵的ES查询的性能提升
在继续对this SO answer的评论时,我进行了以下设置:
使用读取重ES索引(该索引也获得索引请求,但比率为25:1,并使用1秒钟的refresh_interval),并尝试通过显式设置此参数来提高查询性能,以使其缓存搜索查询hits
也没有看到任何性能提升。
我还看到hits.total也在变化,因为我的索引也收到了写请求,我觉得这可能是原因,因为分片正在刷新并且缓存变得无效了。 >
请确认我的假设是否正确,并且可以使用ES中可用的各种缓存设置来提高性能吗?
请注意,我使用了https://opensourceconnections.com/blog/2017/07/10/caching_in_elasticsearch/中提到的监视缓存部分,以下是我获得的O / P。
URL:-http://:9200 / _cat / nodes?v&h = queryCacheMemory,queryCacheevictions,requestCacheMemory,requestCacheHitCount,requestCacheMissCount,flushTotal,flushTotalTime
queryCacheMemory queryCacheevictions flushTotal flushTotalTime
0b 0 353204 1.9h
0b 0 0 0s
0b 0 464814 2.2h
0b 0 292127 1.6h
0b 0 409013 2.1h
0b 0 394303 2h
0b 0 369545 2.1h
0b 0 0 0s
0b 0 0 0s
请注意,即使在计数了requestCacheMemory
,hit
和miss
之后,它也不包含在O / P中
解决方法
查询字符串参数request_cache=true
仅在请求缓存在索引级别被禁用时才有用,但是由于默认情况下已启用,因此除非您在索引处显式禁用了缓存,否则指定该参数无效级别。
此外,您确定总是发送完全相同的JSON查询吗?我问的原因是因为cache key是根据JSON查询创建的,所以即使查询中的单个字符发生更改,键也不会相同。
最后,您可以通过检出此端点来检查请求缓存的命中或丢失方式
GET your-index/_stats/request_cache?human
正在增加什么? hit_count
还是miss_count
?
为什么还要将刷新间隔保持在1秒?尝试30-60s,这将降低负载并且也不会创建要合并的段-我最近正在考虑合并,我认为这样做会使某些类型的缓存无效,尽管可能不是一般的查询缓存。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。