[4]es 段合并的原理和作用

本文集主要是总结自己在项目中使用ES 的经验教训,包括各种实战和调优。


elasticsearch 中每个索引都会创建一个到多个分片和零个到多个副本,这些分片或副本实质上都是lucene索引。

lucene索引是基于多个索引段创建,索引文件中绝大部分数据都是只写一次,读多次,而只有用于保存文档删除信息的文件才会被多次更改

在某些时刻,当某种条件满足时,多个索引段会被拷贝合并到一个更大的索引段,而那些旧的索引段会被抛弃并从磁盘中删除,这操作叫做段合并


进行段合并的原因

  • 索引段的个数越多,搜索性能越低且消耗内存更多
  • 索引段是不可变的,物理上你并不能从中删除信息(如果你碰巧从索引中删除了大量文档,但这些文档只是做了删除标记,物理上并没有被删除)而当段合并发送时,这些标记为删除的文档并没有被复制到新的索引段中。
  • 注:elasticsearch在进行删除时,是不会直接物理删除,而是对要删除的对象进行标记,在进行段合并的时候不复制这些数据到新的索引段中。

段合并的好处

  • 当多个索引段合并为一个的时候,会减少索引段的数量并提高搜索速度
  • 同时也会减少索引的容量(文档数)

段合并的代价

  • IO操作代价,在速度较慢的系统中,段合并会显著影响性能

elasticsearch允许用户选择段合并政策(merge policy)及储存级节流(store level throttling)

一般不需要修改段合并的默认设置,在记录日志时,日志是按照每天,周,月存入索引。旧的索引一般是只可读的,它们是不可能修改的。 这种情况下,把每个索引的段降至1是有效的。搜索过程就会用到更少的资源,性能更好。


选择正确的段合并策略

尽管段合并是lucene的责任,elasticsearch也允许用户配置想用的段合并策略
到目前为止有三种可用的合并策略:

  • tiered(默认)
    它能合并大小相似的索引段,并考虑每层允许的索引段的最大个数
  • log_byte_size
    该策略不断地以字节数的对数为计算单位,选择多个索引来合并创建新索引
  • log_doc
    与log_byte_size类似,不同的是前者基于索引的字节数计算,后者基于索引段文档数计算

为了告知elasticsearch我们想使用的段合并策略,可以将配置文件的index.merge.policy字段泪痣成我们期望的段合并策略类型例如:index.merge.policy.type: tiered

调度

es允许我们定制合并策略的执行方式,调度器分两种
默认的是并发合并调度器 ConcurrentMerge-Scheduler

并发合并调度器

该调度器使用多线程执行索引合并操作

顺序合并调度器

它使用同一个线程执行所有的索引合并操作,在执行合并时,该线程的其他文档处理都会被挂起,从而索引操作会延迟进行


通过每秒自动刷新创建新的段,用不了多久段的数量就爆炸了。有太多的段是一个问题。每个段消费文件句柄,内存,cpu资源。更重要的是,每次搜索请求都需要依次检查每个段。段越多,查询越慢。

ES通过后台合并段解决这个问题。小段被合并成大段,再合并成更大的段。

这是旧的文档从文件系统删除的时候。旧的段不会再复制到更大的新段中。

这个过程你不必做什么。当你在索引和搜索时ES会自动处理。这个过程如图:两个提交的段和一个未提交的段合并为了一个更大的段所示:

  1. 索引过程中,refresh会创建新的段,并打开它。
  2. 合并过程会在后台选择一些小的段合并成大的段,这个过程不会中断索引和搜索。

图1:两个提交的段和一个未提交的段合并为了一个更大的段


  1. 下图描述了合并后的操作:
  • 新的段flush到了硬盘。
  • 新的提交点写入新的段,排除旧的段。
  • 新的段打开供搜索。
  • 旧的段被删除。

图2:段合并完后,旧的段被删除

合并大的段会消耗很多IO和CPU,如果不检查会影响到搜素性能。默认情况下,ES会限制合并过程,这样搜索就可以有足够的资源进行。

optimize API

optimize API最好描述为强制合并段API。它强制分片合并段以达到指定max_num_segments参数。这是为了减少段的数量(通常为1)达到提高搜索性能的目的。

警告
不要在动态的索引(正在活跃更新)上使用optimize API。后台的合并处理已经做的很好了,优化命令会阻碍它的工作。不要干涉!

在特定的环境下,optimize API是有用的。典型的场景是记录日志,这中情况下日志是按照每天,周,月存入索引。旧的索引一般是只可读的,它们是不可能修改的。 这种情况下,把每个索引的段降至1是有效的。搜索过程就会用到更少的资源,性能更好:

POST /logstash-2014-10/_optimize?max_num_segments=1 <1>
  • <1> 把索引中的每个分片都合并成一个段

参考链接:

http://www.phperz.com/article/16/0229/201432.html
http://blog.csdn.net/wangnan9279/article/details/68066935

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352