专栏首页SmartSiElasticSearch 段合并

ElasticSearch 段合并

由于自动刷新过程每秒会创建一个新的段,这样会导致短时间内段数量暴增。段数目太多会带来比较大的麻烦。每一个段都会消耗文件句柄、内存和 CPU 运行周期。更重要的是,每个搜索请求都必须按顺序检查每个段。所以段越多,搜索也就越慢。

Elasticsearch 通过在后台进行 段合并 来解决这个问题。小的段被合并成大的段,然后这些大的段会被合并成更大的段。

段合并的时候将那些被标记为删除的旧文档从文件系统中删除。被标记删除的文档或者更新文档的旧版本文档不会被拷贝到新的更大的段中。

段合并不需要你做什么,在索引和搜索时会自动发生。该过程的工作原理如下图所示,两个提交过的段和一个未提交的段被合并到更大的段中:

  • 在索引时,刷新 refresh 进程会创建新的段并开放供搜索。
  • 合并进程选择几个相似大小的段,在后台将它们合并到一个新的更大的段中。这不会中断索引和搜索。

下图阐述了合并的完成过程:

  • 新的片段被刷新 flush 到磁盘。
  • 写入一个新的提交点,其中包含新的段,并排除旧的较小段。
  • 新的段开放供搜索。
  • 旧段被删除。

合并大的段需要消耗大量的I/O和CPU资源,如果任其发展会影响搜索性能。默认情况下,Elasticsearch 会调节合并进程,以使搜索仍具有足够的资源来执行。

关于为你的实例调整合并的建议,请参阅分段与合并

2. optimize API

optimize API 可以看做是强制合并API。它会将一个分片强制合并到 max_num_segments 参数指定大小的段数目。这样做的目的是减少段的数量(通常减少到一个),来提升搜索性能。

optimize API 不应该被用在一个动态索引上,一个正在被更新的索引。后台合并进程可以很好地完成这项工作。optimizing 会阻碍这个进程。不要干扰它!

在某些具体情况下,optimize API 可能是有好处的。例如,日志记录,每天、每周、每月的日志被存储在一个索引中。较旧的索引基本上都是只读的,他们不太可能改变。

在这种情况下,将旧索引的每个分片优化为以个单独段是有用的,它会使用更少的资源,同时搜索会更快:

POST /logstash-2014-10/_optimize?max_num_segments=1

上述代码将索引中的每个分片合并到一个段中。

请注意,使用 optimize API 触发段合并的操作不会受到任何的限制。这可能会消耗掉你节点上全部的I/O资源, 使其没有足够的资源来处理搜索请求,从而有可能使集群失去响应。如果你想要对索引执行 optimize,你需要先使用分片分配(查看 迁移旧索引)把索引移到一个安全的节点,再执行。

Elasticsearch版本:2.x

原文:https://www.elastic.co/guide/cn/elasticsearch/guide/2.x/merge-process.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Redis中Scan命令的基本用法

    SCAN 命令以及比较相近的 SSCAN、HSCAN 和 ZSCAN 命令都用于增量迭代数据集元素:

    smartsi
  • 有状态流处理:Flink状态后端

    这篇文章我们将深入探讨有状态流处理,更确切地说是 Flink 中可用的不同状态后端。在以下部分,我们将介绍 Flink 的3个状态后端,它们的局限性以及根据具体...

    smartsi
  • Hadoop 数据压缩简介

    文件压缩带来两大好处:它减少了存储文件所需的空间,并加速了数据在网络或者磁盘上的传输速度。在处理大量数据时,这两项节省可能非常重要,因此需要仔细考虑如何在 Ha...

    smartsi
  • 1024程序员节快乐,听首歌今天早点下班吧~

    祝各位程序员1024节日快乐! 世界上还有很多比写代码快乐的事 比如听一首歌 今天早点下班吧~ ? ?

    腾讯开源
  • 一周AI新闻回顾(2017-12-10)

    用户1594945
  • MyBatis 源代码阅读笔记 2 基于"注解"方式的代码编写

    https://github.com/Jason-Chen-2017/source-code-reading

    一个会写诗的程序员
  • SpringCloud 2.x学习笔记:9、Spring Cloud Eureka Server HA高可用 (3个节点) (Greenwich版本)

    Eureka Client定时连接Eureka Server,获取服务注册表中的信息并缓存到本地。 微服务Client端在消费远程API的时候不用每次去服务注...

    程裕强
  • 【iOS开发】UITableView优化

    移动开发中,任何一个应用都或多或少的有列表的存在,列表的上下滑动直接关系到用户体验。如果处理不好,就会使得列表滑动起来有明显的卡顿效果。所以对列表的优化,让它更...

    吴老师
  • 【IDEA使用教程】利用教育邮箱免费激活Jetbrains系列产品

    前两天Ms丁女士提醒我Jetbrains有个解谜活动,可以免费撸到Jetbrains单个产品十八个月的使用权,但是这个活动截止到3月15号就结束了,我也没赶上,...

    浩Coding
  • MediaPlayer(一)--Android MediaPlayer的使用方法

    为了模拟实现Android MediaPlayer的实现,需要先了解下MediaPlayer的简单使用方法, 这里只列举其中一种使用方式, 以这个为模板利用ff...

    小蚂蚁与大象

扫码关注云+社区

领取腾讯云代金券