在我的 ES 集群中,我几乎没有读取大量索引(开始看到这些索引的性能问题),该集群拥有大约 5000 万个文档,并注意到其中大多数文档的总文档数的 25% 左右被删除,我知道当后台合并操作发生时,这些已删除的文档数量会随着时间的推移而减少,但就我而言,这些计数始终约为文档总数的 25% 左右,我有以下问题/疑虑:
- 这些巨大的删除数量是否会影响搜索性能,因为它们仍然是 lucene 不可变段的一部分,并且搜索发生在所有段上并返回文档的最新版本,因此不可变段的大小会很高,因为它们包含大量已删除的内容docs,然后另一个操作来找出 doc 的最新版本。
- 如果删除的文档数量巨大,定期合并操作是否会耗时且效率低下?
- 有什么方法可以一次性删除这些大量已删除的文档,因为看起来后台合并操作无法跟上大量已删除的文档?
Thanks
您删除的文档仍然是索引的一部分,因此它们会影响搜索性能(但我无法告诉您这是否会产生巨大影响)。
对于定期合并,Lucene“不愿意”合并重段,因为它需要一些磁盘空间并产生大量 IO。
通过以下方式,您可以获得有关您的细分市场的一些宝贵见解索引段 API https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-segments.html
如果您的段接近 5GB 限制,则它们很可能不会自动合并,直到它们大部分由已删除的文档构成。
您可以使用以下命令强制合并索引强制合并API https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-forcemerge.html
请记住,强制合并可能会对大型索引的集群产生一些压力。存在仅删除文档的选项,这应该会减轻负担。
only_expunge_deletes(可选,布尔值)如果为 true,则仅删除
包含文档删除的段。默认为 false。
在 Lucene 中,文档并不是从段中删除;而是从段中删除。刚刚标记为
已删除。在合并期间,会创建一个新段,该段不会
包含那些文档删除。
Regards
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)