jvm 我不明白ElasticSearch滚动搜索中的解释

wfveoks0  于 2022-11-07  发布在  ElasticSearch
关注(0)|答案(1)|浏览(139)

“保持初始搜索上下文处于活动状态对于主动更新索引来说成本很高.”
上面句子中的高成本是否指内存使用?
那么,为什么内存使用率如此之高呢?
以便在保持活动状态的同时对索引的更新请求进行排队?
或者是因为在内存中缓存了活动索引快照?

8zzbczxx

8zzbczxx1#

从官方文件来看:
滚动返回在初始搜索请求时与搜索匹配的所有文档。它忽略对这些文档的任何后续更改。[...]搜索上下文由初始请求创建,并由后续请求保持活动。[...]
通常,后台合并进程通过将较小的段合并在一起以创建新的较大段来优化索引。一旦不再需要较小的段,就会将其删除。此进程在滚动期间继续,但打开的搜索上下文会阻止删除旧段,因为它们仍在使用中。
保持较旧的段处于活动状态意味着
需要更多的磁盘空间和文件句柄**。请确保已将节点配置为具有足够的可用文件句柄。请参阅文件描述符。
此外,如果区段包含已删除或更新的文件,则搜寻内容必须追踪区段中的每个文件在初始搜寻要求时是否为作用中的。如果您的索引上有许多开启的卷轴,且这些卷轴会持续进行删除或更新,请确定您的节点有足够的堆积空间
在上面的文档中添加了重点,以强调为什么在一段时间内保持一个或多个滚动上下文是昂贵的。Elasticsearch会尽最大努力保持所有内容的新鲜和活跃,并丢弃旧数据,但滚动上下文基本上是把旧数据生命支持,并把它藏在一个角落里多一点时间,然后在不再需要滚动上下文时让其消亡。
这就是为什么需要更多的资源(主要是存储、文件句柄和堆)来保持滚动上下文的活动,这就是所谓的“高成本”

相关问题