找到问题的解决办法了么?

日志热温分离情况下,冷数据节点负载高似乎仍然会影响热数据查询

Elasticsearch | 作者 wangxinrong | 发布于2021年06月11日 | 阅读数:151

目前我是配置了ssd盘节点存放最近3天数据,历史数据在hdd盘节点上。因为是用了7.11版本,索引采用ilm管理,只有打开、冻结状态。旧索引并没有关闭状态的。
 
大部分情况下,是没有问题的,查最近1-3天的数据比较快,查3天前的数据比较慢。
但是一旦有查询导致hdd盘的所有节点iowait达到100%,服务器很卡的情况下,对最近1-3天的数据查询也会很慢。
 
我的理解是用xxx-*的方式,以date类型的日期字段做范围查询。它会先做prefilter,找到所有-*匹配的索引的分片,从原数据中判断是否有所查时间范围的数据,找到有的分片,再做搜索。因为有数据的分片都在ssd的热节点上,所以查询会比较快。当hdd盘节点非常卡的时候,prefilter这个找分片做判断的阶段会卡住,影响性能。
 
不知道这种情况下,有没有好的办法避免或减少我上面说的这种影响呢?
已邀请:

Ombres

赞同来自:

我能想到两种方式
第一种,查询阶段判断要查的索引,明确指定查询索引,不使用通配符;或者冷热库分别设置别名,查询前判断冷热索引,使用对应别名
第二种,prefilter可以关闭的,pre_filter_shard_size设置大一些试试

Charele

赞同来自:

你的那个理解就是不正确的。
 
1 首先,当你用GET index-2020*/_search来查询所有2020年的索引的时候,
它会先用IndexNameExpressionResolver解析器来解析出具体的索引,(索引只有1个,也可能有100个)
这个查找只依赖于元数据,
没有“prefilter”,也不会涉及分片,这里不会有性能问题。
 
2
你说的“以date类型的日期字段做范围查询”,我不能确定是什么意思。
仅仅用日期来过滤要查哪些索引吗???
 
还是说你的search请求类型是针对date类型的字段range查询?
 
如果是前者,那跟preFilter跟本没什么关系,
如果是后者,才涉及到preFileter的问题, 
你应该显式地减小pre_filter_shard_size阀值让它能用到“preFileter查询“以提搞性能。
而不是加大这个值或关闭这个。

要回复问题请先登录注册