【问题标题】:Is it ok to forcemerge with only_expunge_deletes on a read-write index?可以在读写索引上强制合并 only_expunge_deletes 吗?
【发布时间】:2019-09-18 02:16:17
【问题描述】:

根据force merge 文档:

只能针对只读索引调用强制合并。对读写索引运行强制合并可能会导致生成非常大的段(每个段>5Gb),并且合并策略永远不会考虑再次合并,直到它主要由已删除的文档组成。这可能会导致非常大的片段保留在分片中。

但是,我不确定是否可以在读写索引上运行 forcemerge 和 only_expunge_deletes。使用only_expunge_deletes 选项是否仍然存在产生非常大段的风险?如果是这样,当不手动调用forcemerge时,ES通常如何回收空间?

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    正如引用的文档中提到的,forcemerge 应该只在只读索引上真正调用。

    要回答您的问题,ES constantly merges segments 在后台并在此过程中删除已删除的文档,因此您永远不必担心这一点。

    您可以在this great video 中想象这是如何发生的。

    【讨论】:

    • 谢谢,这很有见地。我一定会看视频的。关于ES不断合并段,我有一个生产集群在更新了很多文档后切换到黄色状态。集群缺少可用存储空间,因为旧文档没有被删除(我的意思是没有文件,即使远远超过了删除阈值)。我用only_expunge_deletes 运行forcemerge(由于集群状态,索引无论如何都是只读的),幸运的是确实解决了这个问题。如果 ES 不断合并段,空间应该早点被回收不是吗?
    • 是的,应该有。但是,合并也需要可用空间(可能是已用空间的两倍,有时甚至更多),因此如果空间不足,后台合并可能不会再自动发生。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 2011-03-26
    • 2018-05-23
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多