使用 PostgreSQL 資料庫 WAL 記錄檔

Datastream 會讀取 PostgreSQL 預寫記錄檔 (WAL),擷取及複製來源資料表的資料列層級資料變更。資料庫伺服器會將每項交易變更儲存在 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 檔案的大小。
  • 在批次作業期間使用 UNLOGGED 或 TEMPORARY 資料表。
  • 請檢查 WAL 設定,並考慮降低檢查點頻率。詳情請參閱「WAL 設定」
  • 請檢查是否有大型 DELETE 作業,並考慮改用 TRUNCATE 作業。這樣做可以大幅減少 WAL 檔案資料,但請務必謹慎,因為 Datastream 不會複製 TRUNCATE 作業。

後續步驟