【问题标题】:Does huge number of deleted doc count affects ES query performance大量删除的文档计数是否会影响 ES 查询性能
【发布时间】:2020-02-12 07:20:14
【问题描述】:

在我的 ES 集群中几乎没有读取过重的索引(开始看到这些索引的性能问题),该集群有大约 5000 万个文档,并注意到其中大多数有大约 25% 的文档被删除,我知道这些当后台合并操作发生时,删除的文档数量会随着时间的推移而减少,但在我的情况下,这些数量始终约为总文档的 25%,我有以下问题/疑虑:

  1. 这些巨大的已删除计数是否会影响搜索性能,因为它们仍然是 lucene 不可变段的一部分,并且搜索发生在所有段上并返回最新版本的文档,因此不可变段的大小会很高,因为它们包含巨大删除文档的数量,然后进行另一次操作以找出最新版本的文档。
  2. 如果存在大量已删除的文档,定期合并操作是否会花费大量时间且效率低下?
  3. 有没有什么办法可以一次性删除这些大量已删除的文档,因为后台合并操作似乎跟不上庞大的数量?

谢谢

【问题讨论】:

  • 一个快速的选项可能是软删除记录,然后可能是硬删除记录的夜间作业。
  • @AshishModi 你能解释一下硬删除它们是什么意思吗?你的意思是首先使用 ES 索引中的标志进行软删除,然后实际删除操作?

标签: performance elasticsearch merge


【解决方案1】:

您删除的文档仍然是索引的一部分,因此它们会影响搜索性能(但我无法告诉您它是否会产生巨大影响)。

对于定期合并,Lucene “不愿意”合并重段,因为它需要一些磁盘空间并产生大量 IO。

感谢Index Segments API,您可以对您的细分市场获得一些宝贵的见解

如果您有接近 5GB 限制的段,它们很可能不会自动合并,直到它们主要由已删除的文档构成。

您可以使用 force merge API 强制合并索引

请记住,强制合并可能会对大型索引的集群产生一些压力。存在仅删除文档的选项,这应该可以减轻负担。

only_expunge_deletes(可选,布尔值)如果为真,则仅删除 包含文档删除的段。默认为 false。

在 Lucene 中,不会从段中删除文档;刚刚标记为 删除。在合并期间,会创建一个新段,该段不会 包含那些文档删除。

问候

【讨论】:

  • 感谢您提供有用的信息,我会检查所有这些选项并回复您
猜你喜欢
  • 2014-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-16
  • 1970-01-01
  • 1970-01-01
  • 2011-04-09
  • 2013-12-28
相关资源
最近更新 更多