使用 PostgreSQL 資料庫 WAL 記錄檔

Datastream 會使用 PostgreSQL WAL (預先寫入記錄檔) 交易記錄,讀取 PostgreSQL 資料流。記錄會儲存在資料庫伺服器上的 WAL 檔案中。 WAL 記錄中的每筆記錄,都代表資料庫中某個資料表的實際資料發生單一變更。

設定 PostgreSQL WAL 檔案的設定參數

建議您對 PostgreSQL 資料庫套用下列設定:

  • max_slot_wal_keep_size:設定這個參數 (僅適用於 PostgreSQL 13 以上版本),限制複製運算單元使用的儲存空間量。這對長時間執行的交易尤其重要,因為在極端情況下,WAL 檔案大小可能會佔用整個儲存空間,導致資料庫當機。

  • statement_timeout:將這個參數設為選取的值,即可減少長時間執行的交易造成的延遲。如果資料庫不支援 max_slot_wal_keep_size,您也可以使用 statement_timeout 做為替代的防範措施。

  • wal_sender_timeout:將這個參數設為 0 (停用逾時) 或大於等於 10 分鐘的值。

如果您打算建立超過 10 個串流,或除了預計的串流數量外,其他資源使用的邏輯複製運算單元數量也超過 10 個,請務必修改下列參數:

  • max_replication_slots:視資料庫設定的複製時段數量而定,增加這個參數的值 (每個串流需要 1 個複製時段)。您只能在伺服器啟動時設定 max_replication_slots

  • max_wal_senders:增加這個參數的值,使其大於 max_replication_slots 參數的值。您只能在啟動伺服器時設定 max_wal_senders

最佳化 WAL 記錄檔

從 PostgreSQL 來源複製資料時,為避免串流延遲時間過長,以及 WAL 記錄檔大小快速成長,請考慮採取下列防範措施:

  • 避免執行大型長時間執行的作業,因為這類作業可能會大幅增加 WAL 檔案的大小。
  • 在批次作業期間使用 UNLOGGEDTEMPORARY 表格。
  • 檢查 WAL 設定,並考慮降低檢查點頻率。 詳情請參閱WAL 設定
  • 檢查是否有大型 DELETE 作業,並考慮以 TRUNCATE 作業取代。這麼做可以大幅減少 WAL 檔案資料,但請務必謹慎操作,因為 Datastream 不會複製 TRUNCATE 作業。

後續步驟