Postgresql

postgres:在 PITR 期間未刪除 WAL 文件

  • July 6, 2015

我在我的 postgres 伺服器上設置 PITR 時遇到問題:WAL 歸檔和恢復工作得很好,以及恢復到特定時間點。然而問題是,如果我進行長時間重播,所有 WAL 文件都從存檔中提取並開始堆積在 pg_xlog 目錄中而從未被刪除,這會導致一旦磁碟已滿,播放就會停止並出現錯誤。如果我然後刪除所有日誌並重新啟動伺服器,則重播將繼續,直到磁碟再次滿為止。重複此過程幾次,即可成功完成恢復。(伺服器的實際工作時間只是幾分鐘)

由於這在僅僅幾週的歷史之後就已經很痛苦了,我不能在網上使用這樣的系統,因為恢復過程將永遠需要……

我很感激你能提供的任何幫助。

Ps.: wal_level 設置為最小,並且在恢復期間歸檔關閉

您可能在生產系統上將 checkpoint_timeout 設置得非常高,並且歸檔開關由 checkpoint_segments 驅動,可能與較低的 archive_timeout 設置相結合。

但是,checkpoint_segments 在恢復過程中沒有任何作用。恢復期間的重新啟動點僅由 checkpoint_timeout 驅動。由於恢復可以比生產創建文件更快地重放文件,這意味著您有大量的舊 xlog 文件等待重新啟動點以允許它們被清除。

一種解決方案是將正在恢復的系統的 checkpoint_timeout 降低相當多,然後在恢復完成後將其設置回來。這將導致重新啟動點更頻繁地發生,從而允許更快地刪除日誌文件。

另一種選擇是在恢復和重命名較新文件後,在恢復期間簡單地讓腳本從 pg_xlog 中刪除文件。如果系統在恢復期間崩潰,則可能必須從存檔中重新獲取一些已刪除的文件。

該系統旨在容忍文件一旦被提取就從存檔中刪除並且無法重新提取的情況。這就是為什麼它將所有獲取的文件儲存在 pg_xlog 中,直到重新啟動點;因此,如果恢復崩潰,它具有重新啟動恢復所需的所有數據。只要您不從存檔中刪除文件,您就可以將它們從 pg_xlog 中刪除。

幸運的是,這種情況在 9.5 中會得到改善。

引用自:https://dba.stackexchange.com/questions/106025