即使设置了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

请注意,即使在计数了requestCacheMemoryhitmiss之后,它也不包含在O / P中

解决方法

查询字符串参数request_cache=true仅在请求缓存在索引级别被禁用时才有用,但是由于默认情况下已启用,因此除非您在索引处显式禁用了缓存,否则指定该参数无效级别。

此外,您确定总是发送完全相同的JSON查询吗?我问的原因是因为cache key是根据JSON查询创建的,所以即使查询中的单个字符发生更改,键也不会相同。

最后,您可以通过检出此端点来检查请求缓存的命中或丢失方式

GET your-index/_stats/request_cache?human

正在增加什么? hit_count还是miss_count

,

为什么还要将刷新间隔保持在1秒?尝试30-60s,这将降低负载并且也不会创建要合并的段-我最近正在考虑合并,我认为这样做会使某些类型的缓存无效,尽管可能不是一般的查询缓存。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...