Elasticsearch:如何减少磁盘使用量

时间:2014-12-04 09:48:23

标签: elasticsearch debian

我在Debian服务器上安装了Elasticsearch 1.2.2,索引文件约为5.3M。当我运行myindex/_stats时,我会收到以下信息:

{
   "_shards": {
      "total": 10,
      "successful": 5,
      "failed": 0
   },
   "_all": {
      "primaries": {
         "docs": {
            "count": 5306837,
            "deleted": 100209
         },
         "store": {
            "size_in_bytes": 32003706527,
            "throttle_time_in_millis": 1657592
         },
  ....
}

告诉我我的文档的总大小等于~32 GB

但是,elasticsearch文件夹中数据文件夹的大小为 72GB

Elasticsearch doc,我试过了

curl -XPOST 'http://localhost:9200/myindex/_optimize?only_expunge_deletes=true'

运行此命令

  • 将已删除文档的数量从300k减少到100k(由上面的_stats命令返回)但不是我预期的0
  • 将磁盘使用率从90G降低到72G,但不是32G,这是我文档的实际大小

(注意:我还在所有索引= curl -XPOST 'http://localhost:9200/_optimize?only_expunge_deletes=true上运行此命令,没有显着差异)

如何将数据文件夹大小减小到文档的实际大小?

3 个答案:

答案 0 :(得分:3)

默认情况下,如果分段的删除百分比超过10%,则elasticsearch仅合并一个分段。如果要删除索引中标记为已删除的所有文档,则应更改elasticsearch.yml中的index.merge.policy.expunge_deletes_allowed并将其设置为0,然后运行optimize命令:

curl -XPOST' http://localhost:9200/myindex/_optimize?only_expunge_deletes=true'

您可以查看at this link了解有关合并政策的更多详情。

答案 1 :(得分:0)

您应该运行以下内容:

curl -XPOST 'http://localhost:9200/myindex/_optimize?max_num_segments=1

也许你应该多次运行它。 (因为如果有太多的段,它将不会在一个步骤中加入所有段。)

答案 2 :(得分:0)

我认为您在尺寸上看到的差异与索引和文档元数据有关,这对任何数据库都是正常的。索引的大小取决于您的映射。从技术上讲,您的文档大小永远不会与elasticsearch数据文件夹的大小相同。

以下链接可能有助于更好地解释这一点:

Using too much disk space

Elastic blog about storage requirements