(4.1:elasticsearch的segment详解)

es的segment详解

1:segment介绍

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

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

你可能感兴趣的:(ElasticSearch)