目前我是配置了ssd盘节点存放最近3天数据,历史数据在hdd盘节点上。因为是用了7.11版本,索引采用ilm管理,只有打开、冻结状态。旧索引并没有关闭状态的。
大部分情况下,是没有问题的,查最近1-3天的数据比较快,查3天前的数据比较慢。
但是一旦有查询导致hdd盘的所有节点iowait达到100%,服务器很卡的情况下,对最近1-3天的数据查询也会很慢。
我的理解是用xxx-*的方式,以date类型的日期字段做范围查询。它会先做prefilter,找到所有-*匹配的索引的分片,从原数据中判断是否有所查时间范围的数据,找到有的分片,再做搜索。因为有数据的分片都在ssd的热节点上,所以查询会比较快。当hdd盘节点非常卡的时候,prefilter这个找分片做判断的阶段会卡住,影响性能。
不知道这种情况下,有没有好的办法避免或减少我上面说的这种影响呢?
大部分情况下,是没有问题的,查最近1-3天的数据比较快,查3天前的数据比较慢。
但是一旦有查询导致hdd盘的所有节点iowait达到100%,服务器很卡的情况下,对最近1-3天的数据查询也会很慢。
我的理解是用xxx-*的方式,以date类型的日期字段做范围查询。它会先做prefilter,找到所有-*匹配的索引的分片,从原数据中判断是否有所查时间范围的数据,找到有的分片,再做搜索。因为有数据的分片都在ssd的热节点上,所以查询会比较快。当hdd盘节点非常卡的时候,prefilter这个找分片做判断的阶段会卡住,影响性能。
不知道这种情况下,有没有好的办法避免或减少我上面说的这种影响呢?
2 个回复
Ombres
赞同来自:
第一种,查询阶段判断要查的索引,明确指定查询索引,不使用通配符;或者冷热库分别设置别名,查询前判断冷热索引,使用对应别名
第二种,prefilter可以关闭的,pre_filter_shard_size设置大一些试试
Charele - Cisco4321
赞同来自:
1 首先,当你用GET index-2020*/_search来查询所有2020年的索引的时候,
它会先用IndexNameExpressionResolver解析器来解析出具体的索引,(索引只有1个,也可能有100个)
这个查找只依赖于元数据,
没有“prefilter”,也不会涉及分片,这里不会有性能问题。
2
你说的“以date类型的日期字段做范围查询”,我不能确定是什么意思。
仅仅用日期来过滤要查哪些索引吗???
还是说你的search请求类型是针对date类型的字段range查询?
如果是前者,那跟preFilter跟本没什么关系,
如果是后者,才涉及到preFileter的问题,
你应该显式地减小pre_filter_shard_size阀值让它能用到“preFileter查询“以提搞性能。
而不是加大这个值或关闭这个。