本文介紹DTS全量同步或遷移慢的常見原因,以及相應的解決方法。您可以逐一排查這些原因,并根據解決方法恢復任務。
問題現象
DTS在全量數據同步或遷移階段時,可能會出現耗時很久的現象,或者出現任務卡住的跡象。
可能原因
源庫待同步或遷移的數據量大或無主鍵。
源庫創建了多個DTS任務。
源或目標庫連接異常。例如,數據庫設置了白名單、賬號權限不足、賬號密碼錯誤等。
源或目標庫的性能、網絡延時、網絡帶寬等原因。
目標庫不支持寫入數據。例如,目標庫為只讀數據庫、磁盤已滿、存在死鎖情況等。
排查方法
您可以根據如下方法進行排查:
排查源庫:
預估遷移時間:
排查源庫待遷移對象的數據量級。
嘗試遷移部分表,用作基礎評估時間,比如10G數據量完成遷移的時長,以此來預估整體遷移時間。
排查任務并行情況:檢查是否同時建立了多個任務。
說明多任務并行可能造成一時性的資源緊張,建議分批分時段建立任務。
排查賬號密碼準確性:檢查源庫的用戶名及密碼是否正確。
使用配置任務時指定的用戶名和密碼從遠程連接訪問源庫,測試數據庫能否連通。以MySQL數據庫為例,建立連接的命令為
mysql -h<源庫IP或者域名> -P<源庫端口號> -u<用戶名> -p<密碼>
。排查白名單設置:如源庫為自建庫,您可以檢查源庫的安全設置中是否已完整添加DTS服務器的IP白名單。參見:添加DTS服務器的IP地址段。
排查主鍵和索引情況:檢查源庫大表是否都有主鍵或唯一索引。以MySQL數據庫為例,您可輸入命令
show create table <數據庫名>.<表名>;
,查詢源庫大表是否都有主鍵或唯一索引。說明普通索引或無索引可能會出現多數據現象。
排查目標庫:
排查賬號密碼準確性:檢查目標庫的用戶名及密碼是否正確。
使用配置任務時指定的用戶名和密碼從遠程連接訪問目標庫,測試數據庫能否連通。以MySQL數據庫為例,建立連接的命令為
mysql -h<目標庫IP或者域名> -P<目標庫端口號> -u<用戶名> -p<密碼>
。排查白名單設置:如目標庫為自建庫,您可以檢查目標庫的安全設置中是否已完整添加DTS服務器的IP白名單。參見:添加DTS服務器的IP地址段。
排查實例類型:檢查目標庫實例是否為只讀實例(不支持寫入)。
以MySQL數據庫為例,您可以通過如下命令查詢并修改數據庫狀態。
輸入命令
show global variables like '%read_only%';
,如返回read_only及super_read_only為ON,則表示MySQL數據庫設置為只讀。輸入如下命令,將MySQL從只讀狀態設置為讀寫狀態。
unlock tables; set global read_only=0;
說明如MySQL數據庫為只讀狀態,則read_only參數設置為1或TRUE;如MySQL數據庫為讀寫狀態,則read_only參數設置為0或FALSE。更多信息,請參見MySQL官網。
排查磁盤空間:檢查目標庫的磁盤空間是否已滿。
以RDS MySQL實例為例,您可以在RDS MySQL控制臺查看存儲空間的使用情況。查看方式,請參見RDS MySQL空間不足問題。
排查性能負荷情況:檢查目標庫的負荷狀況,是否達到了性能瓶頸。
以目標實例為RDS MySQL為例,您可以在RDS控制臺的監控與報警頁面查看實例的CPU、內存、I/O等資源負載情況,并對照相應的實例規格,確認是否達到實例規格的限制。查看方式,請參見查看監控信息和RDS MySQL標準版(原X86)主實例規格列表。
排查死鎖情況:檢查目標庫是否存在死鎖。
以MySQL數據庫為例,您可通過如下命令查詢、刪除死鎖。
查看是否鎖表:
show OPEN TABLES whereIn_use > 0;
。查詢鎖表或者慢SQL進程:
SHOW PROCESSLIST;
。刪除該進程:
KILL [CONNECTION | QUERY]thread_id
。
說明出現死鎖,會導致數據無法寫入。
排查網絡:檢查網絡的連通性是否正常,網絡帶寬是否存在限制,在條件允許的情況下建議升級帶寬。
說明您可以通過OS命令(如ping, telnet等)或使用第三方工具測試網絡的連通性及網絡延時。
更多信息
增量任務延遲的解決方案,請參見如何解決增量遷移延遲或同步延遲。
若本文無法解決您的問題,您可以通過釘釘(釘釘通訊客戶端下載地址)進入到DTS客戶交流釘釘群(群號:68325004196或68640008972),進行咨詢。