如何對 Amazon Redshift 切換到逐個模式的原因進行疑難排解?

1 分的閱讀內容
0

我想使​​用 AWS Database Migration Service (AWS DMS) 任務將資料遷移到 Amazon Redshift。但是我的任務發生延遲或資料不一致問題,並且我看到諸如「XXXXBulk 套用作業失敗。嘗試採用「逐個」模式執行大量陳述式 XXXXX」。

簡短描述

Amazon Redshift 是一個線上分析處理 (OLAP) 資料倉儲,由於成本原因,其並非設計用於進行頻繁交易。根據預設,AWS DMS 會使用批次套用模式批次處理變更。如果 Redshift 以逐個模式執行,則 DMS 任務不會將變更套用至目標,並導致資料不一致或延遲問題。當您使用批次套用模式時,AWS DMS 會執行下列動作:

  1. 批次套用設定控制的批次中收集變更。
  2. 建立淨變更資料表,其中包含從批次到目標執行個體的所有變更。
  3. 採用演算法將交易分組,並大量套用至目標。

當資料複寫到 Amazon Redshift 的遷移任務無法套用批次時,AWS DMS 不會讓整個批次失敗。AWS DMS 會分解批次,並切換到逐個模式來套用交易。當 AWS DMS 遇到造成批次失敗的交易時,其會記錄交易至 Amazon Redshift 目標的 awsdms_apply_exceptions 資料表。然後,AWS DMS 會逐個套用批次的其他交易,直到該批次的所有交易均套用至目標。最後,AWS DMS 會切換回新批次的批次套用模式,並繼續採用批次套用,除非另一批次失敗。

解決方法

若要查看批次是否失敗,以及 AWS DMS 是否使用逐個模式,請檢查 AWS DMS 任務日誌。每當批次失敗且 AWS DMS 切換至逐個模式時,您會看到下列日誌項目:

「[TARGET_APPLY ]I: 大量套用作業失敗。嘗試採用「逐個」模式執行大量陳述式 (bulk_apply.c:2175)」

當發生此情況時,AWS DMS 會依序將交易套用至目標,直到 AWS DMS 在批次遇到任何交易問題為止。如果 AWS DMS 遇到問題,它會記錄交易,且您會看到類似下列項目的日誌項目:

「[TARGET_APPLY ]W: 若來源變更不會造成影響,則不會套用至目標資料庫。如需詳細資訊,請參閱「awsdms_apply_exceptions」資料表。(endpointshell.c:5984)」

注意: 除非您在 AWS DMS 任務設定中指定控制資料表結構描述,否則預設會在公有結構描述中建立 awsdms_apply_exceptions 資料表。

在 AWS DMS 記錄交易之後,會完成批次的所有交易應用程式。然後,AWS DMS 再次切換到批次套用。在日誌中,您會看到類似以下內容的訊息:

「[TARGET_APPLY ]I: 切換回大量套用模式 (bulk_apply.c:4751)」

從線上交易處理 (OLTP) 資料庫執行的交易變更可能會影響 Amazon Redshift 效能。當批次套用失敗時,AWS DMS 會切換到逐個模式。在 AWS DMS 以逐個模式執行交易的持續時間內,目標延遲會增加。在 AWS DMS 切換回大量套用之後,目標延遲會減少。

若要解決此問題,請連線 Amazon Redshift 目標。然後,執行以下命令以取得 awsdms_apply_exceptions 資料表的輸出,以確定導致批次失敗的查詢:

select * from public.awsdms_apply_exceptions order by 4 desc;

找到導致批次失敗的查詢後,檢查錯誤。解決該問題,使任務不會進入逐個模式。

相關資訊

針對 AWS DMS 遷移進行偵錯: 工作發生錯誤時該怎麼辦

使用 Amazon Redshift 資料庫作為 AWS Database Migration Service 的目標

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