為什麼當我執行 AWS DMS CDC 任務時,來源 PostgreSQL 資料庫上有高儲存消耗?

2 分的閱讀內容
0

我正在執行 AWS Database Migration Service (AWS DMS) 變更資料擷取 (CDC) 任務,並使用 PostgreSQL 資料庫做為來源。當我執行 AWS DMS CDC 任務時,為什麼來源資料庫上會看到高儲存消耗?

簡短描述

當您使用 PostgreSQL 做為 CDC 任務的來源時,AWS DMS 會使用 邏輯複寫時段 (PostgreSQL 功能) 從來源資料庫取得變更。這些時段代表一個操作流程,這些流程按照在 PostgreSQL 來源資料庫中建立的順序重播。

根據設計,即使未連接到 PostgreSQL 來源,邏輯複寫時段仍會重新訓練 AWS DMS 所需的翻譯日誌 (WAL)。因此,只有在 AWS DMS 確認已從複寫時段擷取所需變更後,WAL 才會從 PostgreSQL 移除。AWS DMS 透過提升複寫時段的 restart_lsn,確認其具有必要的變更。

造成 PostgreSQL 來源儲存消耗高的原因

由於 PostgreSQL 如何實作邏輯複寫時段功能,在某些情況下,來源資料庫上可能發生儲存磁碟區相關問題。

  • AWS DMS CDC 任務已停止很久,這表示 AWS DMS 未連接到來源資料庫,且沒有消耗來源上複寫時段的變更。這表示 PostgreSQL 會持續保留 WAL,且不會刪除 AWS DMS 尚未讀取的舊版 WAL。因此,來源資料庫上的儲存空間最後會滿載。
  • 繁重的工作負載:使用邏輯複寫時段時,造成過多 WAL 產生的繁重工作負載也會導致 PostgreSQL 資料庫的儲存空間滿載。發生這種情況的原因是,如果複寫時段需要日誌序號 (LSN),PostgreSQL 仍會保留 WAL。
  • 閒置複寫時段:即使 AWS DMS 正在複寫變更的資料表、結構描述或資料庫非作用中,複寫時段保留的 WAL 仍會包含該資料表、結構描述或資料庫的相關資訊。即使資料表上沒有任何交易處理,這仍會導致來源上的儲存滿載。

解析度

檢查複寫時段是否造成 PostgreSQL 來源上的磁碟空間使用量過高

若要檢查複寫時段是否造成 PostgreSQL 資料庫中磁碟空間使用過高,請執行為什麼我在 Amazon RDS for PostgreSQL 上收到 "No space left on device (裝置沒有剩餘空間)" 或 "DiskFull (磁碟已滿)" 錯誤?中列出的查詢。

**注意:**這些查詢中,有許多可用於自我管理 PostgreSQL 安裝。

開啟 WAL 活動訊號功能

開啟 AWS DMS WAL 活動訊號功能,協助您避免消耗 PostgreSQL 來源資料庫上的儲存空間。此功能會模擬虛擬交易,因此閒置的邏輯複寫時段不會保留舊的 WAL 日誌。此活動訊號會保持 restart_lsn 移動,並防止 PostgreSQL 來源的儲存空間滿載。

若要開啟 WAL 活動訊號功能,請將此額外連線屬性 (ECA) 新增至 PostgreSQL 來源端點:

heartbeatEnable=Y;

或者,指定這些額外 ECA:

heartbeatFrequency=frequency;heartbeatSchema=schemaname;

活動訊號頻率決定在 PostgreSQL 來源上執行的活動訊號交易頻率 (以分鐘為單位)。例如,如果您將活動訊號頻率設定為 15,AWS DMS 會在來源上每 15 分鐘執行一次活動訊號交易。

活動訊號結構描述指定 AWS DMS 在哪個資料庫結構描述建立資料庫物件,以產生活動訊號交易。

注意:活動訊號交易只有在 AWS DMS 任務執行時才會在來源上執行。如果您的 AWS DMS 任務已停止,WAL 活動訊號功能也不會作用。

限制 PostgreSQL 中時段的大小

您可以在 PostgreSQL 13 及更新版本的來源資料庫上套用 max_slot_wal_keep_size。這會設定可由複寫時段保留的 WAL 最大數量。

注意:max_slot_wal_keep_size 設定可協助您避免 PostgreSQL 來源上儲存空間的滿載問題。但是,這也可能導致 AWS DMS CDC 任務從複寫時段讀取 WAL 變更前,WAL 即在來源中遭到清除 。因此,該任務宣告失敗。


相關資訊

邏輯解碼概念

使用 PostgreSQL 作為 DMS 來源時的額外連線屬性

為什麼我會收到 Amazon RDS for PostgreSQL 上 "No space left on device (裝置沒有剩餘空間)" 或 "DiskFull (磁碟已滿)" 錯誤?

AWS 官方
AWS 官方已更新 2 年前