postgresql 如何手動清理歸檔文件(pg_wal)


背景

發現數據庫宕機,排查原因發現數據磁盤爆滿,經排查發現是數據庫數據目錄下,pg_wal目錄占用過大導致。

pg_wal(Write-AHead Logging) 說明

wal日志位置:
$PGDATA/pg_wal(pg10之前叫pg_xlog)

#
#wal日志文件命名規則:
#我們看到的wal日志是這樣的:000000010000000100000092
#其中前8位:00000001表示timeline;
#中間8位:00000001表示logid;
#最后8位:00000092表示logseg

清除檢查點以前的XLOG文件

root@~> pg_controldata $PGDATA

Latest checkpoint location:           1/E000028  
Prior checkpoint location:            1/D18C068  
Latest checkpoint's REDO location:    1/E000028  
Latest checkpoint's REDO WAL file:    00000001000000010000000E  
  
表示00000001000000010000000E之前的pg_wal文件可以刪除

如何人為清理pg_wal文件

參考原文

如果你的數據庫配置不當,導致pg_wal文件堆積的話,如何人為的處理呢?

比如你配置了archive_mode=on,但是沒有配置archive_command,那么xlog文件會一直堆積(pg_wal寫完后,會寫.ready,但是由於沒有配置archive_command,也就是說不會觸發歸檔命令,所以一直都不會寫.done)。

從而導致pg_wal一直不會被清理。

然后使用pg_archivecleanup命令來清理。

# 1. 讀取控制文件,找到哪個文件是可以被清理的
pg_controldata $PGDATA  
  
Latest checkpoint location:           1/E000028  
Prior checkpoint location:            1/D18C068  
Latest checkpoint's REDO location:    1/E000028  
Latest checkpoint's REDO WAL file:    00000001000000010000000E  
  
# 表示00000001000000010000000E之前的pg_wal文件可以刪除 (pg10以前的叫做pg_xlog)
pg_archivecleanup -d $PGDATA/pg_xlog 00000001000000010000000E  
pg_archivecleanup: keep WAL file "/disk1/digoal/pgdata/pg_root1921/pg_xlog/00000001000000010000000E" and later  
pg_archivecleanup: removing file "/disk1/digoal/pgdata/pg_root1921/pg_xlog/00000001000000010000000D" 

如何關閉或修改歸檔模式

  • 修改archive_mode配置

    當啟用archive_mode時,通過設置archive_command將已完成的WAL段發送到歸檔存儲。除了off,disable,還有兩種模式:on,always。在正常操作期間,兩種模式之間沒有區別,但是當設置為always的情況下,WAL archiver在存檔恢復或待機模式下也被啟用。在always模式下,從歸檔還原或流式復制流的所有文件都將被歸檔(再次)。archive_mode和archive_command是單獨的變量,因此可以在不更改存檔模式的情況下更改archive_command。此參數只能在服務器啟動時設置。當wal_level設置為minimal時,無法啟用archive_mode。

  • 修改wal_level配置

    • 1、minimal是默認的值,它僅寫入崩潰或者突發關機時所需要的信息(不建議使用)。
    • 2、archive是增加wal歸檔所需的日志(最常用)。
    • 3、hot_standby是在備用服務器上增加了運行只讀查詢所需的信息,一般實在流復制的時候使用到。
  • 修改archive_command配置

    請參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM