栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Elasticsearch之segment merge

Elasticsearch之segment merge

目录

1:什么是segment

2:segment的数据结构

3:segmen merge的意义

4:segment merge 参数


1:什么是segment

es底层是由lucene实现,每个索引都是一个lucene文件,每个索引包含多个shard和多个replica。每个lucene文件又多个segment组成。具体es写入和读取的流程参见官网。

2:segment的数据结构

lucene有2种文件格式,具体是根据 X GET _cat/segments/${index_name}?v

返回的CompoundFile 判断的 数据结构参见

3:segmen merge的意义

如果数据segment过多,索引每次查询时会加载全部segment信息到内存,要查询全部的segment导致查询效率降低。同时如果有大量删除的文档存在,磁盘空间不能释放,实际索引文件会很大。分片分配、分片均衡的时候会浪费大量资源(IO,带宽,CPU等)导致集群yellow。所以segment数量越少,索引效率越高。

4:segment merge 参数

segment merge的几个重要参数

这些参数支持动态针对索引设置

PUT INDEX/_settings
{
    "merge.policy.max_merge_at_once_explicit": "30", // force merge时并行最大合并段个数 默认30
    "merge.policy.max_merge_at_once": "10",  // 普通merge时 一次最大合并的段个数 默认10
    "merge.policy.max_merged_segment": "5gb", // merge之后产生的segment最大大小 默认5g
    "merge.policy.expunge_deletes_allowed": "10.0",  // 当执行force merge包含 only_expunge_deletes=true时,当segment中的删除文档数占比超过该阈值后合并 默认10%
    "merge.policy.segments_per_tier": "10.0" //每个tier允许的最大segment个数默认10个

}

merge分为自然merge和force merge  自然merge es只要有写入都会进行。

forcemerge手工触发api

${index_name}/_forcemerge?only_expunge_deletes=true&max_num_segments=

max_num_segments 期望合并的最大segment个数。

only_expunge_deletes是否释放、回收删除文档空间。

X GET _cat/segments/${index_name}?v  查看索引segment信息。

_tasks?detailed=true&actions=*forcemerge 查看force merge 任务情况。

PS:forcemerge一但触发,无法取消task。由于forcemerge期间会消耗大量的io和cpu 不建议在有数据写入的热索引上执行。以免引起查询变慢和集群异常导致的数据丢失,甚至不能恢复的索引问题。

可以通过调节force_merge线程数(es默认单线程force merge)和 max_merge_at_once_explicit参数适当减少资源消耗。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/719721.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号