(一:原理3)elasticsearch的segment详解

es的segment详解

1:segment介绍

服务器总内存除过给jvm配置的其余都给了lucene,占用page cache内存,page cache保存对文件数据segment的缓存。
free -g可查看内存使用,es节点只有es服务,基本cache就是缓存的segment
segment : 每个shard分片是一个lucene实例,每个分片由多个segment组成!!每个segment占用内存,文件句柄等。
写入流程

1.1:flush总结

1:es的各个shard会每个30分钟进行一次flush操作。
2:当translog的数据达到某个上限的时候会进行一次flush操作。
3:flush后清除translog

1.2:segment配置

写入时segment的大小和数量由refresh_interval决定

POST /index/_settings
{“refresh_interval”:10s”}

2:segment影响

2.1:segment增多的影响

一个分片一个lucene实例(多个segment)。lucene内部的数据是由一个个segment组成的,es写入经过了refresh间隔,将该时间段写入的全部数据refresh成一个segment,segment多了之后会进行merge成更大的segment,默认最大5G,所有会产生过多的segment。

2.2:segment占用查看

查看segment总的情况:get cat/segment 
查看节点的segment总占用内存情况(sm):GET _cat/nodes?v&h=ip,ram.percent,sm
某查看索引的segment:get index/segment: 

1:对内存系统影响
每个segment的catch内存是随着gc不会释放掉的!!!!所以过大过多的segnment会导致系统运行没有内存,进而导致查询超时等等。

2:数据查询影响
lucene查询时会遍历每个segment完成,所以过多的segment会导致查询速度下降,没有内存甚至导致超时

3:segment优化

优化的目的是释放catch的内存!
1:删除不用的索引。
delete index
2:关闭索引(文件仍然存在于磁盘,只是释放掉内存)。需要的时候可以重新打开。

post index/_close
post index/_open

3:force merge强制合并
force merge本质是对分片上的segment强制合并,节省大量的memory.
该操作占用大量的io,避免在热索引(正写入数据的索引)进行操作。

合并一般包括api合并和手动命令合并

手动:post index/_forcemerge?max_num_segments=1
  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值