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

是否可以在forcemerge时指定只清理一个段里的deleted文档,不合并2个段

Elasticsearch | 作者 wangxinrong | 发布于2025年01月10日 | 阅读数:1335

我这边有个索引,因为数据量大,deleted文档数量多,而且增长缓慢,所以一个月内查询的cpu使用率波动幅度很大。
月初做完forcemerge?only_expunge_deletes=true之后,可能cpu只有10%不到,到月末cpu就到40-50%了。

所以我想加大forcemerge的频率,但是我测试发现,要满足合并条件,好像必须是找2个大小相近的段做合并。
假如deleted文档还没到33%我就执行only_expunge_deletes,要么它达不到段合并的条件,不会清理deleted文档,要么就是我用max_num_segments强制它做合并,这种很容易产生一个更大的段,之后再要让deleted数量达到33%的清理阈值,时间就更久了。

有办法让它只清理deleted文档,不产生更大的段吗?
已邀请:

Fred2000 - 与其抱怨世界,不如改变自己

赞同来自:

直接实现“只清理一个段的 deleted 文档”在 Elasticsearch 当前版本中无法实现,但通过调整合并策略、优化清理频率、细化配置参数(如 expunge_deletes_allowed),可以在一定程度上缓解问题。如果查询性能持续受影响,可以考虑结合索引分级策略或按需索引切分来进一步优化性能和资源利用率。

要回复问题请先登录注册