背景
發現資料庫宕機,排查原因發現資料磁盤爆滿,經排查發現是資料庫資料目錄下,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是在備用服務器上增加了運行只讀查詢所需的資訊,一般實在流復制的時候使用到,
- 1、minimal是默認的值,它僅寫入崩潰或者突發關機時所需要的資訊(不建議使用),
-
修改
archive_command配置請參考
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/273188.html
標籤:其他
上一篇:MYSQL - JDBC連接
下一篇:gpload的配置與使用
