2014-12-04 230 views
3

我在Debian服務器上安裝了Elasticsearch 1.2.2,其索引文件大約爲5.3M。當我運行myindex/_stats,我得到以下信息:Elasticsearch:如何減少磁盤使用量

{ 
    "_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,無顯著差異)

怎麼辦我將數據文件夾的大小減少到我的文檔的實際大小?

回答

0

您應該運行以下命令:

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

也許你應該運行它不止一次。 (因爲如果分段太多,將無法一步加入所有分段。)

+0

感謝您的答覆。我試了一下,花了45分鐘運行,但不幸的是,它並沒有減少磁盤使用量 – benoit 2014-12-04 12:22:13

3

默認情況下,elasticsearch僅在刪除百分比超過10%時合併掉一個分段。如果要刪除索引中標記爲已刪除的所有文檔,則應更改elasticsearch.yml中的index.merge.policy.expunge_deletes_allowed並將其設置爲0,然後運行optimize命令:

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

有關合並策略的更多詳細信息,您可以查看at this link

0

我認爲你看到的大小差異與索引和文檔元數據有關,這對任何數據庫都是正常的。索引的大小取決於您的映射。所以在技術上,您的文檔大小將永遠不會與elasticsearch數據文件夾的大小相同。

以下鏈接可能有助於解釋這更好:

Using too much disk space

Elastic blog about storage requirements