- 1.問題描述
在使用公共雲DTS做雲下IDC資料遷移到雲上DRDS過程中資料全量初始化的過程中任務卡住資料遷移無法正常完成;
重新開機多次都會卡住,影響正式遷移的進度和時間安排;
- 2.問題分析
經過确認一直都是如下圖的表出現卡住遷移已經完成大部分的動作,但是任務卡住無法繼續;
回報阿裡同學排查是懷疑max_statement_time參數設定太短,碰到寫大字段逾時報錯,dts側可以通過暫時降低batch送出的大小繞過;
針對max_statement_time在drds層面控制台沒有該參數的設定,從指令行查詢有該參數但是設定為0,代表不限制;
從drds下挂的rds檢視該參數如下圖所示,同樣沒有限制;
下圖是DTS的log回報報錯的情況是drds側的報錯;
是以需要排查一下當時什麼原因導緻DTS在寫資料的時候連接配接中斷了。很可能是DRDS寫RDS時某個參數逾時了,導緻連接配接中斷,然後DRDS中斷了與DTS的連接配接;
經過排查drds下的log日志發現有一些max packet limit的報錯
檢查雲上drds的max_allowed_packet參數設定是16M的大小;
對應挂載的rds該參數設定是1024M;
是以懷疑是drds層面該參數設定過小,但又存在大字段,batch送出超過16M導緻DTS内部報錯,導緻任務卡住無法繼續;
然後就查詢了卡住表的結構和一部分資料内容;
确實存在有longblob,text等大字段,存在有大的日志内容在longblob字段當中,和客戶确認這是一張日志表主要存在關鍵業務的封包日志,主要是封包的大小無法确定,每個封包大小跟具體的實際業務有關系,是以确實可能會存在大封包的情況存在導緻超過max_allowed_packet的設定大小;
如下是從rds中查到的表的一條記錄的平均大小,大概在3-4k左右;
- 3.問題解決
通過調整max_allowed_packet參數到最大2G以後,重新開機dts任務以後問題解決;
通過和阿裡DTS同學交流确定,出錯的時候其實大部分資料已經遷完了,應該有不多的較長的行導緻寫失敗了,從平均行長看3、4K一行,DTS這邊一批次寫入一般會256~1024條,對應max_allowed_packet 16MB應該沒有問題,但這張有問題的表可能有為數不多的幾條資料,每條會有接近16MB的樣子,這就很可能一個寫入批次超過16MB的門檻值導緻寫入失敗;
并且結合和客戶應用同學确定會存在有大封包的情況出現,證明這個解釋也很合理;