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

Elasticsearch 7.13 删除文档后如何释放存储空间、手动执行forcemerge操作

Elasticsearch 7.13 删除文档后如何释放存储空间、手动执行forcemerge操作

遇到问题:

实际过程中,在删除文档后,磁盘空间并未释放,反而增加?

从索引的维度 , 使用cat api 查看每个索引shards , segment 的个数 . 这样就能查看出哪些索引需要做force merge。下面的以segment count为倒序查看所有索引的segment 和shards相关信息.

下面命令在Kibana图形化界面的开发工具里面执行

GET /_cat/indices/?s=segmentsCount:desc&v&h=index,segmentsCount,segmentsMemory,memoryTotal,mergesCurrent,mergesCurrentDocs,storeSize,p,r

下面是结果:

#! Deprecation: Elasticsearch built-in security features are not enabled. Without authentication, your cluster could be accessible to anyone. See https://www.elastic.co/guide/en/elasticsearch/reference/7.13/security-minimal-setup.html to enable security.
index                           segmentsCount segmentsMemory memoryTotal mergesCurrent mergesCurrentDocs storeSize p r
mail_center.received                       82          1.7mb      47.1mb             0                 0    99.1gb 3 0
.kibana_1                                   6         13.6kb      13.6kb             0                 0     2.1mb 1 0
.kibana-event-log-7.10.2-000001             5         10.8kb      10.8kb             0                 0    28.5kb 1 0
.kibana_task_manager_1                      4         12.9kb      12.9kb             0                 0   114.9kb 1 0
.apm-custom-link                            0             0b          0b             0                 0      208b 1 0
.apm-agent-configuration                    0             0b          0b             0                 0      208b 1 0

上图看到的每个索引segementcount 个数.

更新 & 删除机制

删除: 每个段中维护一个.del 文件,ES 只是逻辑删除文档,在.del 文件中标记为已删除,查询依然可以查到,但是会在结果中过滤掉;

  • 1)删除索引是会立即释放空间的,不存在所谓的“标记”逻辑。
  • 2)删除文档的时候,是将新文档写入,同时将旧文档标记为已删除。 磁盘空间是否释放取决于新旧文档是否在同一个segment file里面,因此ES后台的segment merge在合并segment file的过程中有可能触发旧文档的物理删除。

但因为一个shard可能会有上百个segment file,还是有很大几率新旧文档存在于不同的segment里而无法物理删除。想要手动释放空间,只能是定期做一下force merge,并且将max_num_segments设置为1。

更新:引入版本的概念,旧版本的记录将在 .del 文件中标记为删除,新版本的文档将被索引到一个新段(Segment)。

手动执行forcemerge操作,手动释放磁盘空间

对索引删除的数据做force merge

POST /mail_center.received/_forcemerge?only_expunge_deletes=true&max_num_segments=1

1.通过/_cat/indices/ api查看所有index的段情况和当前正在进行merge的文档数。

GET /_cat/indices/?s=segmentsCount:desc&v&h=index,segmentsCount,segmentsMemory,memoryTotal,mergesCurrent,mergesCurrentDocs,storeSize,p,r


2.查看各个节点forceMerge的线程数

GET _cat/thread_pool/force_merge?v&s=name


3.查看forceMerge任务详情


 

GET _tasks?detailed=true&actions=*forcemerge


4.查看某个index的forceMerge情况

GET /_cat/segments/test-000032?v&s=prirep,shard

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

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

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