1. 程式人生 > 其它 >KingbaseES 單例項環境wal(xlog)日誌清理案例

KingbaseES 單例項環境wal(xlog)日誌清理案例

WAL是Write Ahead Log的簡寫,和Oracle的redo日誌類似,在R3版本存放在data/sys_log中,R6版本以後在data/sys_wal目錄,在資料庫訪問過程中,任何對資料塊的修改都會記錄到wal日誌,並寫入到wal檔案儲存到磁碟,wal日誌可用於資料庫的例項恢復和資料恢復。
如果開啟了歸檔,在目錄archive_status下會有一些檔案,以ready結尾的,表示可以歸檔但還沒有歸檔,done結尾的表示已經歸檔。開啟了歸檔後,只有歸檔成功的sys_wal檔案才會被清除。在每次歸檔命令被執行後,會觸發清除標籤的動作,在執行檢查點時,也會觸發清除歸檔標籤檔案的動作。

首先明確如下幾個相關引數的含義:

  • wal_segment_size:單個 WAL 檔案的大小,預設為16MB,一般可不做更改。
  • wal_keep_segments:指定在後備伺服器需要為流複製獲取日誌段檔案的情況下,sys_wal目錄下所能保留的日誌檔案段的最小數目。每個段通常是 16 兆位元組。如果一個連線到傳送伺服器的後備伺服器落後了超過wal_keep_segments個段,傳送伺服器可以移除一個後備機仍然需要的 WAL 段,在這種情況下複製連線將被中斷。最終結果是下行連線也將最終失敗(不過,如果在使用 WAL 歸檔,後備伺服器可以通過從歸檔獲取段來恢復)。
  • min_wal_size:只要 WAL 磁碟用量保持在這個設定之下,在檢查點時舊的 WAL 檔案總是 被回收以便未來使用,而不是直接被刪除。這可以被用來確保有足夠的 WAL 空間被保留來應付 WAL 使用的高峰,例如執行大型的批處理任務。 預設是 80 MB。這個引數只能在kingbase.conf 或者伺服器命令列中設定。
  • max_wal_size:在自動 WAL 檢查點之間允許 WAL 增長到的最大尺寸。這是一個軟限制, 在特殊的情況下 WAL 尺寸可能會超過max_wal_size, 例如在重度負荷下,archive_command失敗或者高的 wal_keep_segments設定。預設為 1 GB。增加這個引數 可能導致崩潰恢復所需的時間。這個引數只能在kingbase.conf 或者伺服器命令列中設定。
  • archive_timeout:如果 DB 例項寫入量很少,到達 archive_timeout 會觸發 WAL 檔案的強制切換。因此如果 archive_timeout 如果太短就會產生很多新的 WAL,從而產生大量歸檔。

WAL空間使用情況如下:

  1. 如果日誌量大於max_wal_size,則WAL日誌空間儘量保持在max_wal_size。因為會觸發檢查點,不需要的段檔案將被移除直到系統回到這個限制以下。
  2. 如果日誌量小於max_wal_size,則WAL日誌空間至少保持min_wal_size。
  3. 通常情況下,WAL日誌空間大小在min_wal_size和max_wal_size之間動態評估。該估計基於在以前的檢查點週期中使用的WAL檔案數的動態平均值。如果實際使用量超過估計值,動態平均數會立即增加。

一、WAL日誌膨脹無法清理案例
通常情況下wal日誌可以資料庫自動清理,如果配置了archive_mode=on,但是沒有配置archive_command,那麼wal檔案會一直堆積(wal寫完後,會寫.ready,但是由於沒有配置archive_command,也就是說不會觸發歸檔命令,所以一直都不會寫.done),所以wal會一直不清理。如果你開啟了歸檔,但是歸檔命令是失效的,那麼wal目錄會一直增長,不會自動刪除WAL,會使得此目錄被撐爆。
如下案例歸檔失敗,導致wal日誌不斷增長的案例:

1)檢視sys_log日誌,發現歸檔失敗:

2)檢視資料庫後臺程序(archiver歸檔失敗)

3)檢視wal日誌資訊

4)手工執行歸檔命令(執行失敗)

5)檢視歸檔配置及日誌目錄資訊

=如下所示,歸檔日誌目錄名(archiv)和配置檔案中指定的目錄名(archive)不匹配=

6)檢視歸檔資訊

二、手工清理wal日誌

1、WAL日誌保留
對於wal日誌可以通過作業系統rm命令直接刪除,也可以使用資料庫系統命令 sys_archivecleanup,建議使用 sys_archivecleanup命令。
在清除wal日誌或歸檔日誌前,首先需要判斷需要保留的wal日誌,如果誤刪除了系統正在訪問的wal日誌,將導致資料庫系統執行故障或資料丟失。
WAL日誌保留原則:
1)按照業務應用對基於時間點恢復(PITR)的要求,保留wal日誌或歸檔日誌。
2)檢視控制檔案中"Latest checkpoint's REDO WAL file",記錄檢查點的wal日誌檔案,在此之前wal日誌檔案可以清理。
3)對於業務應用有要求保留的按照第一條原則,如果應用沒有要求,按照第二條原則。

2、清理wal日誌

1)檢視當前control檔案資訊

2)檢視wal日誌資訊並清理

#清理前:
[kingbase@node1 sys_wal]$ ls -lh
total 80M
-rw------- 1 kingbase kingbase 16M May 11 13:26 000000010000000000000006
-rw------- 1 kingbase kingbase 16M May 11 13:26 000000010000000000000007
-rw------- 1 kingbase kingbase 16M May 11 13:26 000000010000000000000008
-rw------- 1 kingbase kingbase 16M May 11 13:00 000000010000000000000009
-rw------- 1 kingbase kingbase 16M May 11 13:02 00000001000000000000000A
drwx------ 2 kingbase kingbase  78 May 11 13:49 archive_status

日誌清理:

清理後:
[kingbase@node1 sys_wal]$ ls -lh
total 32M
-rw------- 1 kingbase kingbase 16M May 11 13:00 000000010000000000000009
-rw------- 1 kingbase kingbase 16M May 11 13:02 00000001000000000000000A
drwx------ 2 kingbase kingbase  78 May 11 13:49 archive_status

三、總結
本文是針對於單例項環境的wal日誌的清理,對於單例項環境,在執行手工清理時所要考慮的因素比較簡單。但對於流複製叢集環境,在執行手工的日誌清理時,需要考慮的因素比較多,這個在另外的文件中再介紹。