从elasticsearch批量删除文档后,删除文档的大小不会立即发布吗?

时间:2019-04-17 17:41:15

标签: elasticsearch

这是AWS ElasticSearch的开始统计数据

Count: 98365255
Size in Bytes: 62.24 GB

我删除了大约1/3的文档后

AWS ElasticSearch仪表板显示

Count: 68782759
Size in Bytes: 57.82 GB

删除1/3个文档后,我没有看到太多可用空间。

所以我直接调用_stats api,获得了不同的字节大小。

"docs": {
            "count": 68782759,
            "deleted": 32680935
        },
        "store": {
            "size_in_bytes": 62078477520,
            "throttle_time_in_millis": 0
        },

当前计数与AWS Elasticsearch仪表板匹配:     68782759。

但是size_in_bytes是

62078477520. 

与批量删除之前的大小几乎相同,

62.24 GB.

简单来说,

我认为删除1/3个文档后,我会得到较大的可用空间。

  • AWS仪表板仅显示删除了1/3个文档后,我释放了1/10的空间
  • _stats显示,删除了1/3个文档后,几乎没有释放任何空间。

我以后是否需要等待size_in_bytes数据正确?

删除文档后,我是否必须执行某种刷新操作才能获得可用空间?

谢谢!

1 个答案:

答案 0 :(得分:1)

我在这里找到了答案。

https://discuss.elastic.co/t/free-disk-space-monitoring-after-deleting-records/146651

Bernt_Rostad的答案,

“从索引中删除文档时,磁盘空间不会自动释放。其原因是索引段(碎片的构造块)是不可变的Lucene索引。这意味着存储在段中的文档永远不会物理更新或删除的,如果您在Elasticsearch中执行更新或删除,则将其标记为已删除。

因此,Elasticsearch将不时在索引中执行段合并,通常是在索引中包含非常小的段或标记为已删除的文档数量占存储文档总数的很大百分比时(“大”可能是20-30%)。合并后,Elasticsearch将读取两个或多个较小的段,并将其写入新的较大段。在此过程中,Elasticsearch将跳过所有标记为已删除的文档,以便在完成新的段并删除较小的原始文档后,您将节省与删除的文档大小相对应的磁盘空间。“

现在有释放空间的方法。但就我而言,我将等待段合并以释放空间。

注意:

等待一天后,释放了磁盘空间。

"primaries": {
        "docs": {
            "count": 68784759,
            "deleted": 1885108
        },
        "store": {
            "size_in_bytes": 42676386191,
            "throttle_time_in_millis": 0
        },

从62078477520减少到42676386191。