elasticsearch forcemerge
文章目录elasticsearch forcemerge1 elasticsearch删除更新与删除机制1..1 删除1.2 更新2 forcemerge操作2.1 查看es索引优化信息列表2.1.1 api2.2 force_merge操作2.2.1 低版本2.1 以下2.2.1.1 api2.2.1.1 演示2.2.2 高版本2.2.2.1 api2.2.2.2 演示elasticsearch
·
文章目录
elasticsearch forcemerge
es验证版本:1.0.0 , 7.x
1 elasticsearch 删除更新与删除机制
1.1 删除
每个段中维护一个.del 文件,ES 只是逻辑删除文档,在.del 文件中标记为已删除,查询依然可以查到,但是会在结果中过滤掉。
- 删除索引是会立即释放空间的,不存在所谓的“标记”逻辑。
- 删除文档的时候,是将新文档写入,同时将旧文档标记为已删除。 磁盘空间是否释放取决于新旧文档是否在同一个segment file里面,因此ES后台的segment merge在合并segment file的过程中有可能触发旧文档的物理删除。
1.2 更新
引入版本的概念,旧版本的记录将在 .del 文件中标记为删除,新版本的文档将被索引到一个新段(Segment)。
es在Segment数量达到一定得临界点会自动forcemerge。实际得生产情况,会极大得影响查询得效率。
解决方案:执行forcemerge操作,手动释放磁盘空间;在merge的过程中会占用极大的cpu,io资源,尽量选择系统低消费时间段force_merge。
2 forcemerge操作
官网文档:https://www.elastic.co/cn/
2.1 查看es索引优化信息列表
2.1.1 api
使用posman调接口,或者是浏览器,get/post 请求代码均可;
当前api在高低版本均可使用
- 查看api
# 查询api,高低版本均支持,博主已验证
http://xxx.xxx.xxx.xxx:9200/_cat/indices/?s=segmentsCount:desc&v&h=index,segmentsCount,segmentsMemory,memoryTotal,mergesCurrent,mergesCurrentDocs,storeSize,p,r
- 结果
参数说明
- index:es中得索引名称
- segamentsCount: segament文件数量,正常情况越少查询效率越高
- megesCurrent:force_merge线程个数
- mergesCurrentDocs:force_merge文档个数
- storeSize:当前index占用磁盘的空间
- p:当前index有几个分片
- r:几份副本
2.2 force_merge操作
2.2.1 低版本 2.1 以下
2.2.1.1 api
- 单索引
# 语法 max_num_segments=1参数设置1,${index_name}填写要force_merge的index
post: http://xxx.xxx.xxx.xxx:9200/${index_name}/_optimize?max_num_segments=1
- 多索引
# 语法 max_num_segments=1参数设置1,${index_name}填写要force_merge的index
post: http://xxx.xxx.xxx.xxx:9200/${index_name1},${index_name2}/_optimize?max_num_segments=1
# 全部 force_merge
post: http://xxx.xxx.xxx.xxx:9200/_optimize?max_num_segments=1
- 参数说明
- max_num_segments:要优化的段数。要完全优化索引,请将其设置为1。默认值是简单地检查是否需要执行合并,如果需要,则执行合并。
- only_expunge_deletes:优化过程应该只删除其中有删除的片段。在Lucene中,不会从段中删除文档,而只是将其标记为已删除。在段的合并过程中,将创建一个没有这些删除的新段。此标志仅允许合并具有删除的段。默认为false。请注意,这不会超过 index.merge.policy.expunge_deletes_allowed阈值。
- flush:优化后是否应执行冲洗。默认为 true。
- wait_for_merge:该请求是否应等待合并结束。默认为true。请注意,合并可能是一项非常繁重的操作,因此运行设置为的合并可能很有意义false。
- force:即使分片中只有一个片段而没有删除,也强制执行合并操作。 [ 1.1.0 ]
2.2.1.1 演示
2.2.2 高版本
2.2.2.1 api
- 单索引
# 语法 max_num_segments=1参数设置1,${index_name}填写要force_merge的index
http://xxx.xxx.xxx.xxx:9200/${index_name}/_forcemerge?max_num_segments=1
- 多索引
# 语法 max_num_segments=1参数设置1,${index_name}填写要force_merge的index
http://xxx.xxx.xxx.xxx:9200/${index_name1}, /${index_name2}/_forcemerge?max_num_segments=1
# 全部
http://xxx.xxx.xxx.xxx:9200/_forcemerge?max_num_segments=1
- 参数说明
- max_num_segments:合并到的段数。要完全合并索引,请将其设置为1。默认值是简单地检查是否需要执行合并,如果需要,则执行合并。
- only_expunge_deletes:合并过程应该只删除其中有删除的段。在Lucene中,不会从段中删除文档,而只是将其标记为已删除。在段的合并过程中,将创建一个没有这些删除的新段。此标志仅允许合并具有删除的段。默认为false。请注意,这不会超过 index.merge.policy.expunge_deletes_allowed阈值。
- flush:强制合并后是否应该执行刷新。默认为 true。
2.2.2.2 演示
更多推荐
已为社区贡献1条内容
所有评论(0)