New user sign up using AWS Builder ID
New user sign up using AWS Builder ID is currently unavailable on re:Post. To sign up, please use the AWS Management Console instead.
如何使用 DMS 批次套用功能來改善 CDC 複寫效能?
我正在執行完整載入和變更資料擷取 (CDC) 的 AWS Database Migration Service (AWS DMS) 工作。來源延遲不高,但目標延遲很高或正在增加。如何加速 CDC 複寫階段?
簡短說明
AWS DMS 使用下列方法,在變更資料擷取 (CDC) 階段複寫資料:
- 交易式套用
- 批次套用
AWS DMS CDC 程序預設為單一執行緒 (交易式套用)。這與其他所有線上交易處理 (OLTP) 資料庫引擎所使用的 SQL 複寫方法相同。DMS CDC 複寫取決於來源資料庫交易日誌。在複寫階段進行期間,DMS 會使用交易式套用方法套用變更,如下所示:
- DMS 會將交易日誌中的變更,從來源讀取到複寫資料庫執行個體記憶體。
- DMS 會將變更轉譯,然後傳遞至排序程式元件。
- 排序程式元件依認可的順序排序交易,然後將其依序轉送到目標。
如果來源資料庫上的變更比率很高,則此程序可能需要一些時間。DMS 從來源資料庫接收到很高的傳入工作負載時,CDC 目標延遲指標可能會出現高峰。
DMS 使用單一執行緒複寫方法處理 CDC 變更。DMS 提供工作層級設定 BatchApplyEnabled,可以使用批次在目標上快速處理變更。如果來源資料庫的工作負載很高,而且工作的目標 CDC 延遲較高,則 BatchApplyEnabled 相當好用。預設情況下,DMS 會停用 BatchApplySetting。您可以使用 AWS Command Line Interface (AWS CLI) 啟用此功能。
批次套用的運作方式
使用 BatchApplyEnabled 執行工作時,DMS 會以下列方式處理變更:
- DMS 會從來源資料庫交易日誌,收集批次中的變更。
- DMS 會建立一個稱為淨變更表的表格,其中包含批次中的所有變更。
- 此表格位於複寫資料庫執行個體的記憶體中,並且會傳遞到目標資料庫執行個體上。
- DMS 會套用淨變更演算法,求取淨變更表中所有變更的淨結果,得到實際的目標表格。
例如,如果您使用 BatchApplyEnabled 執行 DMS 工作,並且在單一批次中插入新的列、對該列進行十次更新,然後刪除該列,則 DMS 會將所有這些交易淨除,而不會將它們留存下來。這是因為該列最終被刪除並且不再存在。這個程序會減少套用在目標上的實際交易數。
BatchApplyEnabled 會在一個批次的特定工作中,對表格的列層級套用淨變更演算法。因此,如果來源資料庫經常變更 (更新、刪除和插入),或在同一列上進行這些工作負載的組合,您就可以從 **BatchApplyEnabled 得到最大的使用效益。**這樣可以將要套用至目標的變更減到最少。如果收集的批次進行的變更都是唯一的 (為不同的列記錄進行更新/刪除/插入變更),則淨變更表的演算法程序無法篩選掉任何事件。因此,所有的批次事件都會以批次模式套用到目標。表格必須擁有主索引鍵或唯一索引鍵,才能批次套用到工作上。
DMS 也提供 BatchApplyPreserveTransaction 設定,以進行變更處理調整。如果您啟用 BatchApplyEnabled,則預設會開啟 BatchApplyPreserveTransaction 。如果將其設定為 true,就能維持交易完整性。批次中保證包含交易內來自來源的所有變更。這項設定僅適用於 Oracle 目標端點。
**注意事項:**請注意這項設定的優點和缺點。BatchApplyPreserveTransaction 設定為 true 時,DMS 會在複寫資料庫執行個體的記憶體中,擷取整個長時間執行的交易。進行此操作時會依據工作設定 MemoryLimitTotal 和 MemoryKeepTime,並視需要進行交換,然後再將變更傳送到淨變更表。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 主控台啟用此設定。啟用批次設定之前,請先在系統上完成下列設定工作:
- 安裝和設定最新版本的 AWS CLI。
- 建立 IAM 使用者,使其擁有程式設計存取權。
檢查現有工作的批次設定狀態
- 開啟 AWS DMS 主控台。
- 從導覽面板中選擇資料庫移轉工作
- 選擇您的工作,然後選擇工作設定 (JSON)。在 JSON 中,BatchApplyEnabled 會列為停用狀態。
使用 AWS CLI 啟用批次設定
- 在已安裝 AWS CLI 的情況下開啟系統。
- 執行 aws configure 命令以開啟 AWS CLI 提示字元。
- 輸入您的 AWS 存取金鑰 ID,然後按 Enter 鍵。
- 輸入您的 AWS 私密金鑰 ID,然後按 Enter 鍵。
- 輸入 DMS 資源的區域名稱,然後按 Enter 鍵。
- 輸入輸出格式,然後按 Enter 鍵。
- 使用工作 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 主控台啟用批次設定
- 開啟 AWS DMS 主控台。
- 從導覽面板中選擇資料庫移轉工作。
- 選擇您的工作,然後選擇修改。
- 從工作設定區段中,選擇 JSON 編輯器。
- 修改您要變更的工作設定。例如,從 TargetMetadata 區段中,將 BatchApplyEnabled 變更為 true (預設值為 false)。
- 按一下儲存以修改工作。
請依照下列步驟,確認變更已生效:
- 從工作清單頁面中,選擇您修改過的工作。
- 從概觀詳細資料索引標籤中,展開 工作設定 (JSON)。
- 檢閱工作的工作設定。
在批次模式下執行工作後進行 CDCLatencyTarget 過高的疑難排解
如果在批次模式下執行工作之後 CDCLatencyTarget 過高,則延遲可能是由下列原因造成的:
- 由於缺少主要和次要索引,造成目標的長時間執行交易
- 資源可用性不足,無法處理目標上的工作負載
- DMS 複寫執行個體的高度資源爭用
請遵循 DMS 最佳實務來疑難排解這些問題。
相關資訊

相關內容
- 已提問 2 年前lg...
- AWS 官方已更新 3 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前