1. 程式人生 > >強制清除Elasticsearch中已刪除的檔案

強制清除Elasticsearch中已刪除的檔案

       Elasticsearch是建立在Apache Lucene 基礎上的實時分散式搜尋引擎,Lucene為了提高搜尋的實時性,採用不可再修改(immutable)方式將文件儲存在一個個segment中。也就是說,一個segment在寫入到儲存系統之後,將不可以再修改。那麼Lucene是如何從一個segment中刪除一個被索引的文件呢?簡單的講,當用戶發出命令刪除一個被索引的文件#ABC時,該文件並不會被馬上從相應的儲存它的segment中刪除掉,而是通過一個特殊的檔案來標記該文件已被刪除。當用戶再次搜尋到#ABC時,Elasticsearch在segment中仍能找到#ABC,但由於#ABC文件已經被標記為刪除,所以Lucene會從發回給使用者的搜尋結果中剔除#ABC,所以給使用者感覺的是#ABC已經被刪除了。

       Elasticseach會有後臺執行緒根據Lucene的合併規則定期進行segment merging合併操作,一般不需要使用者擔心或者採取任何行動。被刪除的文件在segment合併時,才會被真正刪除掉。在此之前,它仍然會佔用著JVM heap和作業系統的檔案cache等資源。在某些情況下,我們需要強制Elasticsearch進行segment merging,已釋放其佔用的大量系統資源。

_optimize命令可強制進行segment合併,並刪除所有標記為刪除的文件。Segment merging要消耗CPU,以及大量的I/O資源,所以一定要在你的ElasticSearch叢集處於維護視窗期間,並且有足夠的I/O空間的(如:SSD)的條件下進行;否則很可能造成叢集崩潰和資料丟失。

       下圖展示了我們在進行強制expunge時,所觀察到的CPU和磁碟I/O的使用情況。該叢集執行在微軟的Azure雲平臺IaaS虛擬機器上,所有的資料節點都採用 D13 虛擬機器,資料儲存在本地的SSD磁碟中。該叢集是一個備份叢集,為了保證合併順利進行,在此期間暫停了所有對其進行的寫操作,僅有少量的讀操作。這裡需要注意: expunge操作是一種不得已而為之的操作,即在Elasticsearch不能有效自動清除刪除檔案的情況下才執行該操作。同時建議在此操作期間,最好停止對叢集的所有讀/寫操作,並暫停止shard的自動分配 (cluster.routing.allocation.enable

= none),以防有節點被踢出後shard自動分配造成的資料丟失。

       下面兩個設定可以用於控制清除時的處理速度,其中給出值是預設值,可以根據需求進行調整,具體請參見Merge。此外, 還可以臨時將所有索引的replica設定為0,這樣只用針對Primary進行expunge,以減小I/O壓力。

PUT /{index}/_settings
{
    "settings": {
        "index.merge.policy.expunge_deletes_allowed": "10",
        "index.merge.policy.max_merge_at_once_explicit" : "30"
    }
}

參考資料

  

相關推薦

強制清除Elasticsearch刪除檔案

       Elasticsearch是建立在Apache Lucene 基礎上的實時分散式搜尋引擎,Lucene為了提高搜尋的實時性,採用不可再修改(immutable)方式將文件儲存在一個個segment中。也就是說,一個segment在寫入到儲存系統之後,將不可以再

Linux恢復仍在活動程序刪除檔案

許多情況下,刪除的檔案都可以恢復,比如在該檔案有活動的程序在操作它,並且目前被單個或多個使用者使用時。在 Linux 系統中,每個當前正在執行的程序都會獲得 ID,其被稱之為程序識別符號 “PID”,並將它們存放在 /proc 目錄中。這正是我們恢復仍在執行的程序中(具有

【轉帖】 Windows解決刪除檔案時提示被程序佔用的問題

原文連結是:https://blog.csdn.net/caodinke/article/details/45101119 應用背景:   windows作業系統中,有時我們關閉程式後,一些相關的程序仍在後臺執行,並訪問著一些檔案,使得我們無法對這些檔案及其所屬的資料夾進行刪除、重新命名等操

如何找回刪除檔案

相信大家在使用電腦的過程中,都有過一不小心或者不經意間把重要檔案刪除了的情況,關於救回已刪除檔案,你們都做過哪些努力呢?我們第一就是要到資源回收筒救回已刪除檔案是否存在,如果檔案在資源回收筒,您只需右擊它一鍵還原即可。如果不在,您還能找回刪除檔案嗎? 其實,從電腦中永久刪除不在資源回收筒

Linux檢視磁碟用量,以及殺死刪除檔案的程序

Linux檢視磁碟用量 命令 df -l df -h #易讀模式顯示 Linux檢視當前資料夾使用磁碟用量 #進入資料夾 du -sh 已刪除檔案可能還有程序在使用 找出這些程序的命令 1、如果你知道檔名的話:lsof | grep nohup.out,找到

清除mac的垃圾檔案

清除mac中的垃圾檔案 最近工作用mac要升級最新系統,但是記憶體不夠,開啟關於本機發現系統居然佔用了200多G的空間(已經清掉了50個G了) 但是系統中的東西是想要找出是哪一塊佔用大量記憶體是比較麻煩的事情,剛開始使用終端檢視記憶體佔用情況

處理Linux系統下刪除檔案繼續佔用空間問題

在Linux中,當我們使用rm在linux上刪除了大檔案,但是如果有程序打開了這個大檔案,卻沒有關閉這個檔案的控制代碼,那麼linux核心還是不會釋放這個檔案的磁碟空間,最後造成磁碟空間佔用100%,整個系統無法正常執行。這種情況下,通過df和du命令查詢的磁碟空間,兩者是無法匹配的,可能df顯示磁

從git永久刪除檔案以節省空間

在使用版本管理工具的過程中我們會碰到這樣的問題:不小心把一個不該加入版本管理的檔案加進去了,有時候這個檔案很大,也許我們整個版本庫才幾百 K,但加進去這個沒用的檔案卻有好幾百M,我可不想因為這麼個破爛東西把整個版本庫整個碩大無比,以後維護備份都不方便;還有時候是不小心把一

windows無法刪除檔案,報"無法刪除****,找不到指定檔案,請確定指定的路徑及檔名是否正確"的解決

1.啟用一個cmd 2.到要刪除的檔案(夾)的讓一層目錄下 3.執行命令:dir /x,然後幾下要刪除的檔案(夾)對應行的第三列(記作 MARK) 4.如果是檔案,輸入:del "$MARK"(就是剛才記得東西),是資料夾就輸入:rd "$MARK" 5.大功告成

win8dll字尾檔案強制刪除的一個方法

引言: 在我們解除安裝一個軟體時,有時候會有一些.dll字尾的檔案無法刪除乾淨,原因是被其他程序呼叫,處於執行狀態,無法刪除。這時候必須找到呼叫該dll檔案的程序(exe),可能不只一個,關停這些程序,然後再去刪除對應的dll檔案就能刪除成功了,但是如果dll檔案被wind

MFC如何修改檔案檢視FileView有的樹結構的右鍵選單(其相應函式為OnContextMenu),即如何增加/修改/刪除 選單項?

在用VS做MFC程式設計時,新建的工程中自帶了檔案檢視/類檢視/屬性視窗/輸出視窗等內容。檔案檢視FileView中具有初始右鍵選單,如圖所示: 那麼如果想要給這個右鍵選單增加選單項,該如何實現呢? 1. 首先可以看一下這個右鍵選單是在哪裡響應的,開啟FileView

刪除檔案時,提示檔案在另一個程式開啟而導致檔案無法刪除,怎麼辦

今天下載的一個檔案恢復軟體工具,之後不好用想刪掉就出現上面情況,怎麼刪啊,刪除時候就提示“檔案已經在另一個程式中開啟”,有圖,系統win7, 由於檔案正在開啟著,所以無法刪除,解決辦法如下: 1:關閉開啟該檔案的程式,如果不知道該程式被誰佔用,可以通過工作管理員-->

從Git倉庫恢復刪除的分支、檔案或丟失的commit

在使用Git的過程中,有時可能會有一些誤操作 比如:執行checkout -f 或 reset -hard 或 branch -d刪除一個分支 結果造成本地(遠端)的分支或某些commit丟失 可以通過reflog來進行恢復,前提是丟失的分支或commit資訊沒有被git gc清除 一般情況下,gc對那些

解決SVN誤操作--使用Git倉庫恢復刪除的分支、檔案或丟失的操作

timtiandeiMac:WelfareManager timtian$ git branch recover_branch[tzfhead] 99fbfd5 fatal: 'recover_branch[tzfhead]' is not a valid

Git從庫移除刪除檔案

寫在前面 大家一定遇到過在使用Git時,不小心將一個很大的檔案新增到庫中,即使刪除,記錄中還是儲存了這個檔案。以後不管是拷貝,還是push/pull都比較麻煩。今天在上傳工程到github上,發現最大隻能上傳100MB大小檔案,在本地git庫中有一個150MB檔案,雖然

將資料庫有表匯入到powerDesigner生成pdm檔案

如何將資料庫中已有表匯入到powerDesigner生成pdm檔案   1、create new PDM; 2、select database menu; 3、click Reverse  Engin

強制刪除檔案資料如何找到

    清空回收站是很常見的資料恢復故障。在清空回收站後如何恢復資料就顯的尤為重要了,首先我們需要明白,在清空回收站後不能往要恢復的誤刪檔案所在的分割槽,存入任何新的檔案,否則資料覆蓋了就無力迴天了。接下來我們還需要了解下具體如何恢復清空回收站的資料,具體請看正文了解。 工具

vs2008如何刪除最近開啟的工程、檔案

進入到登錄檔,找到如下路徑(工程): HKEY_CURRENT_USER/Software/Microsoft/VisualStudio/9.0/ProjectMRUList/  找到專案對應的鍵值,手動刪除。 檔案 HKEY_CURRENT_USER\Software\M

刪除資料夾下各級子目錄的.svn檔案

建立一個文字檔案,取名為removeSvn.reg(副檔名由txt改為reg),內容如下 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN] @="<span

c++ 11 顯式預設設定的函式和刪除的函式 總結

今天在一個類中看到如下程式碼不是很懂,原來是c++11 新特性 RateTimer(const RateTimer&) = delete; //不可拷貝/不可賦值 RateTimer& operator=(const RateTimer&) = delete;