如何使用 DMS 批次套用功能來改善 CDC 複寫效能?

2 分的閱讀內容
0

我正在執行完整載入和變更資料擷取 (CDC) 的 AWS Database Migration Service (AWS DMS) 工作。來源延遲不高,但目標延遲很高或正在增加。如何加速 CDC 複寫階段?

簡短說明

AWS DMS 使用下列方法,在變更資料擷取 (CDC) 階段複寫資料:

  • 交易式套用
  • 批次套用

AWS DMS CDC 程序預設為單一執行緒 (交易式套用)。這與其他所有線上交易處理 (OLTP) 資料庫引擎所使用的 SQL 複寫方法相同。DMS CDC 複寫取決於來源資料庫交易日誌。在複寫階段進行期間,DMS 會使用交易式套用方法套用變更,如下所示:

  1. DMS 會將交易日誌中的變更,從來源讀取到複寫資料庫執行個體記憶體。
  2. DMS 會將變更轉譯,然後傳遞至排序程式元件。
  3. 排序程式元件依認可的順序排序交易,然後將其依序轉送到目標。

如果來源資料庫上的變更比率很高,則此程序可能需要一些時間。DMS 從來源資料庫接收到很高的傳入工作負載時,CDC 目標延遲指標可能會出現高峰。

DMS 使用單一執行緒複寫方法處理 CDC 變更。DMS 提供工作層級設定 BatchApplyEnabled,可以使用批次在目標上快速處理變更。如果來源資料庫的工作負載很高,而且工作的目標 CDC 延遲較高,則 BatchApplyEnabled 相當好用。預設情況下,DMS 會停用 BatchApplySetting。您可以使用 AWS Command Line Interface (AWS CLI) 啟用此功能。

批次套用的運作方式

使用 BatchApplyEnabled 執行工作時,DMS 會以下列方式處理變更:

  1. DMS 會從來源資料庫交易日誌,收集批次中的變更。
  2. DMS 會建立一個稱為淨變更表的表格,其中包含批次中的所有變更。
  3. 此表格位於複寫資料庫執行個體的記憶體中,並且會傳遞到目標資料庫執行個體上。
  4. DMS 會套用淨變更演算法,求取淨變更表中所有變更的淨結果,得到實際的目標表格。

例如,如果您使用 BatchApplyEnabled 執行 DMS 工作,並且在單一批次中插入新的列、對該列進行十次更新,然後刪除該列,則 DMS 會將所有這些交易淨除,而不會將它們留存下來。這是因為該列最終被刪除並且不再存在。這個程序會減少套用在目標上的實際交易數。

BatchApplyEnabled 會在一個批次的特定工作中,對表格的列層級套用淨變更演算法。因此,如果來源資料庫經常變更 (更新、刪除和插入),或在同一列上進行這些工作負載的組合,您就可以從 **BatchApplyEnabled 得到最大的使用效益。**這樣可以將要套用至目標的變更減到最少。如果收集的批次進行的變更都是唯一的 (為不同的列記錄進行更新/刪除/插入變更),則淨變更表的演算法程序無法篩選掉任何事件。因此,所有的批次事件都會以批次模式套用到目標。表格必須擁有主索引鍵或唯一索引鍵,才能批次套用到工作上。

DMS 也提供 BatchApplyPreserveTransaction 設定,以進行變更處理調整。如果您啟用 BatchApplyEnabled,則預設會開啟 BatchApplyPreserveTransaction 。如果將其設定為 true,就能維持交易完整性。批次中保證包含交易內來自來源的所有變更。這項設定僅適用於 Oracle 目標端點。

**注意事項:**請注意這項設定的優點和缺點。BatchApplyPreserveTransaction 設定為 true 時,DMS 會在複寫資料庫執行個體的記憶體中,擷取整個長時間執行的交易。進行此操作時會依據工作設定 MemoryLimitTotalMemoryKeepTime,並視需要進行交換,然後再將變更傳送到淨變更表。BatchApplyPreserveTransaction 設定為 false 時,單一交易的變更可跨越多個批次。如果只有部分套用,可能會使資料遺失,例如因為目標資料庫無法使用而導致。

如需 DMS 延遲和批次套用程序的詳細資訊,請參閱 AWS DMS 移轉偵錯部落格的第 2 部分第 3 部分

批次套用的使用案例

在下列情況下,您可以使用批次套用:

  • 工作擁有從來源擷取的大量交易,並且因此造成目標延遲。
  • 工作擁有來自來源的工作負載,其中有在同一列上進行的插入、更新和刪除組合。
  • 不需要在目標上保持嚴格的參考完整性 (已停用 FK)。

限制

批次套用目前有下列限制**:**

  • 預設情況下,Amazon Redshift 目標會使用批次套用。Amazon Simple Storage Service (Amazon S3) 目標則強制使用交易式套用。
  • 批次套用只有在具有主索引鍵/唯一索引的表格上才有效用。對於沒有主索引鍵/唯一索引的表格,大量套用只會在大量模式下套用插入,但會逐一執行更新和刪除。如果表格具有主索引鍵/唯一索引,但觀察到逐一進行的模式切換,請參閱如何在 Amazon Redshift 於 AWS DMS 工作期間大量操作失敗而切換為逐一模式時,進行問題原因的疑難排解?
  • LOB 欄包含在複寫中時,只能在有限的 LOB 模式下使用 BatchApplyEnabled。如需詳細資訊,請參閱目標中繼資料工作設定
  • BatchApplyEnabled 設定為 true 時,如果目標表格具有唯一條件約束,則 AWS DMS 會產生錯誤訊息。

解決方法

**注意事項:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請確認您使用的是最新的 AWS CLI 版本

預設情況下,BatchApplySetting 為停用。您可以使用 AWS CLI 或 AWS DMS 主控台啟用此設定。啟用批次設定之前,請先在系統上完成下列設定工作:

檢查現有工作的批次設定狀態

  1. 開啟 AWS DMS 主控台
  2. 從導覽面板中選擇資料庫移轉工作
  3. 選擇您的工作,然後選擇工作設定 (JSON)。在 JSON 中,BatchApplyEnabled 會列為停用狀態。

使用 AWS CLI 啟用批次設定

  1. 在已安裝 AWS CLI 的情況下開啟系統。
  2. 執行 aws configure 命令以開啟 AWS CLI 提示字元。
  3. 輸入您的 AWS 存取金鑰 ID,然後按 Enter 鍵。
  4. 輸入您的 AWS 私密金鑰 ID,然後按 Enter 鍵。
  5. 輸入 DMS 資源的區域名稱,然後按 Enter 鍵。
  6. 輸入輸出格式,然後按 Enter 鍵。
  7. 使用工作 ARN 和批次設定條件執行 modify-replication-task 命令。

注意事項:在修改工作之前,請確認工作處於已停止狀態。依照您的工作變更下列命令上的 ARN,然後執行命令以變更工作設定。

在 AWS CLI 中成功執行命令後,開啟 DMS 主控台,並再次檢查工作的批次設定狀態。現在 BatchApplyEnabled 在 **工作設定 (JSON)**中列為「已啟用」。

您現在可以啟動 DMS 工作,並觀察移轉效能。

aws dms modify-replication-task --replication-task-arn arn:aws:dms:us-east-1:123456789123:task:4VUCZ6ROH4ZYRIA25M3SE6NXCM --replication-task-settings "{\"TargetMetadata\":{\"BatchApplyEnabled\":true}}"

使用 AWS DMS 主控台啟用批次設定

  1. 開啟 AWS DMS 主控台
  2. 從導覽面板中選擇資料庫移轉工作
  3. 選擇您的工作,然後選擇修改
  4. 工作設定區段中,選擇 JSON 編輯器
  5. 修改您要變更的工作設定。例如,從 TargetMetadata 區段中,將 BatchApplyEnabled 變更為 true (預設值為 false)。
  6. 按一下儲存以修改工作。

請依照下列步驟,確認變更已生效:

  1. 從工作清單頁面中,選擇您修改過的工作。
  2. 概觀詳細資料索引標籤中,展開 工作設定 (JSON)
  3. 檢閱工作的工作設定。

在批次模式下執行工作後進行 CDCLatencyTarget 過高的疑難排解

如果在批次模式下執行工作之後 CDCLatencyTarget 過高,則延遲可能是由下列原因造成的:

  • 由於缺少主要和次要索引,造成目標的長時間執行交易
  • 資源可用性不足,無法處理目標上的工作負載
  • DMS 複寫執行個體的高度資源爭用

請遵循 DMS 最佳實務來疑難排解這些問題。


相關資訊

監控 AWS DMS 工作

如何編寫資料庫移轉指令碼

自動化 AWS DMS 移轉工作

如何使用 AWS DMS 建立來源或目標端點?

變更程序調整設定

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