全部產品
Search
文件中心

DataWorks:離線同步提速或限速

更新時間:Jun 19, 2024

本文為您介紹影響資料同步速度的因素、如何通過調整同步任務的並發配置來實現同步速度最大化、作業的限速選項,以及資料同步過慢的情境。

文檔概述

  • 同步速度受同步任務本身配置、資料庫、網路等多方面影響,詳情請參見:資料同步速度的影響因素

  • 同步任務整體速度慢可能出現在同步過程的各個階段,本文以現象入手,為您提供各個階段運行慢的解決方案,詳情請參見:資料同步慢的情境及解決方案

  • 在資料庫效能限制的情況下,同步速度並非越快越好,考慮到速度過高可能對資料庫造成過大的壓力從而影響生產,Data Integration支援了限速選項,您可根據業務合理配置該值。詳情請參見:限制同步速度

資料同步速度的影響因素

資料同步速度受來源與目標端資料庫環境及同步任務配置等因素影響,其中源端和目的端資料庫的效能、負載和網路情況主要由您自己關注並進行調優。

影響資料同步速度的因素如下:

因素

說明

來源端資料來源

  • 資料庫的效能:CPU、記憶體、SSD硬碟、網路和硬碟等。

  • 並發數:資料來源並發數越高,資料庫負載越高。通常,資料庫的效能越好,它可以承載的並發數越高,您可以為資料同步作業配置越多的並發資料幫浦。

  • 網路:網路的頻寬(輸送量)、網速。

離線同步任務使用的調度資源群組

離線同步任務將有調度資源下發至Data Integration任務執行資源上執行,調度資源使用方式同樣會影響整體Data Integration同步效率。關於離線任務下發機制,詳情請參見:任務下發機制

離線同步任務配置

  • 傳輸速度:是否設定任務同步速度上限值。

  • 並發:從源並行讀取或並行寫入資料存放區端的最大線程數。

  • WAIT資源。

  • Bytes的設定:單個線程的Bytes=1048576,在網速比較敏感時,會出現逾時現象,此時建議將Bytes設定的較小。

  • 查詢語句是否建索引。

目的端資料來源

  • 效能:CPU、記憶體、SSD 硬碟、網路和硬碟。

  • 負載:目的資料庫負載過高會影響同步任務資料寫入效率。

  • 網路:網路的頻寬(輸送量)、網速。

資料同步慢的情境及解決方案

說明

離線同步任務日誌詳情請參見:離線同步處理記錄分析

資料同步慢的情境

現象

可能原因

解決方案

等待調度資源

  • 現象1:同步任務日誌顯示等待gateway。

  • 現象2:執行個體屬性頁面顯示等待資源時間長。資源耗時

離線任務由調度資源群組下發至引擎執行,因此,當離線任務調度資源群組執行任務數到達上限,則需要等待資源群組上執行的任務執行結束,釋放資源。

您可以在運行診斷頁面查看當前任務等待資源時,哪些任務佔用資源。

說明

若使用公用調度資源群組,建議遷移到獨享資源群組上執行。

等待執行資源

同步任務日誌顯示wait。wait

當前Data Integration任務執行資源組剩餘資源不夠當前任務執行。

例如,資源群組最大支援8個並發同時執行,若當前存在3個並發為3的任務,其中2個任務同時執行,那麼機器剩餘的並發為2,此時另一個並發為3的任務將由於資源群組剩餘資源不夠,導致當前任務進入等待狀態,日誌顯示wait。

檢查資源群組下是否有其他任務運行佔用了大量資源,您可以通過以下方案解決此類問題:

說明
  • 您可以通過運行診斷頁面查看當前任務等待資源時,哪些任務佔用資源,及資源佔用情況。等待資源

  • 不同規格的資源群組可執行並發數不同,詳情可參見:效能指標與計費標準

  1. 檢查佔用資源的任務是否卡住或者嚴重變慢,如果任務存在問題需要先解決此類問題或者停掉部分任務。

  2. 如果任務未卡住,待佔用該Data Integration任務執行資源的任務執行成功,將資源釋放後啟動運行。

  3. 您也可以找到佔用該資源的工作清單及責任人,與其協調降低任務並發數。

  4. 您還可以減少當前同步任務的並發數並重新提交發布任務。

  5. 還支援您對任務執行資源組進行擴容。詳情請參見:擴縮容操作

同步任務運行速度過慢

同步任務日誌顯示run,但速度為0。此類情況任務並非未執行,如果長時間處於該狀態,建議單擊Detail log查看詳細執行情況。運行慢若Detail log中顯示WaitReaderTime參數值大,表示等待從源端返回資料時間較長。查看日誌

  • 源端切分鍵不合理。

    基於切分鍵進行資料切分得出的取數SQL在資料庫執行慢。

  • 源端資料讀取相關SQL執行時間過長(例如部分外掛程式存在的where參數、querySql參數)

    情境樣本:資料同步任務where條件沒有索引,導致全表掃描同步變慢。

  • 任務同步時間點資料庫負載高。

  • 網路問題:網路的頻寬(輸送量)、網速。

說明

無法保障公網環境下的資料同步速度。

  • 語句執行較慢問題:

    • 配置前置或後置語句時:

      • 確保用於過濾資料的欄位已添加索引,避免同步任務全表掃描資料。

      • 避免或減少函數等複雜處理,若有必要,可盡量在同步前在資料庫進行相關操作。

    • 來源資料表的資料是否太多,如果資料太多,建議拆分為多個任務。

    • 查詢日誌,找到執行阻塞的SQL,諮詢資料庫管理員解決。

  • 檢查資料庫對應時間點負載情況。

同步任務日誌顯示run,但速度為0。此類情況任務並非未執行,如果長時間處於該狀態,建議單擊Detail log查看詳細執行情況。運行慢若Detail log中顯示WaitWriterTime參數值大,表示寫入目標端時間較長。

  • 寫端外掛程式中配置的前、後置語句執行慢(例如部分外掛程式中存在的preSql、postSql參數中配置SQL執行慢)。

  • 任務同步時間點資料庫負載高。

  • 網路問題:網路的頻寬(輸送量)、網速。

說明

無法保障公網環境下的資料同步速度。

日誌顯示run,有速度,但同步過程速度慢。日誌

  • 關係型資料庫任務切分鍵設定不合理,導致並發設定無效,單並發同步。

  • 並發設定過小。

  • 同步過程產生大量髒資料,影響同步速度。

  • 資料庫效能問題。

    說明

    資料庫效能越好,可承載的並發數越高,可為資料同步作業配置的並發越高。

  • 網路問題:網路的頻寬(輸送量)、網速。

說明

無法保障公網環境下的資料同步速度。

  1. 合理設定切分鍵,關於任務切分鍵配置,詳情請參見:分割任務

  2. 在資源群組支援的最大並發範圍內,合理規劃各個任務佔用的並發數,並適當調大當前任務並發。

    嚮導模式下,通過介面化配置並發數,指定任務所使用的並行度。通過指令碼模式配置並發數的樣本如下。日誌

    說明

    不同規格的資源群組可執行並發數不同,詳情可參見:效能指標與計費標準

  3. 處理髒資料。關於髒資料的定義,詳情請參見:基本概念

  4. 分布式執行任務的情況下,任務並發數量的設定要求:資源群組下機器個數的值需要小於等於資源群組單機規格支援的最大並發數。

  5. 跨雲、跨地區同步資料時,建議網路打通後走內網進行同步,網路連通解決方案詳情請參見:網路連通方案

  6. 檢查資料庫負載情況。

限制同步速度

Data Integration同步任務預設不限速,任務將在所配置的並發數的限制上以最高能達到的速度進行同步。另一方面,考慮到速度過高可能對資料庫造成過大的壓力從而影響生產,Data Integration同時提供了限速選項,您可以按照實際情況調優配置(建議選擇限速之後,最高速度上限不應超過30 MB/s)。指令碼模式通過如下範例程式碼配置限速,代表1 MB/s的傳輸頻寬。

"setting": {
      "speed": {
         "throttle": true // 是否限流。
        "mbps": 1, // 具體速率值。
      }
    }
  • throttle包括truefalse

    • throttle設定為true時,表示限速,您必須設定mbps具體的資料值。如果沒有設定mbps,程式運行將會出錯或者速率異常。

    • throttle設定為false時,表示不限速,則mbps的配置無意義。

  • 流量度量值是Data Integration本身的度量值,不代表實際網卡流量。通常,網卡流量往往是通道流量膨脹的1至2倍,實際流量膨脹取決於具體的資料存放區系統傳輸序列化情況。

  • 半結構化的單個檔案沒有切分鍵的概念,多個檔案可以設定作業速率上限來提高同步的速度,但作業速率上限和檔案的個數有關。

    例如,有n個檔案,作業速率上限最多設定為n MB/s:

    • 如果設定n+1 MB/s,還是以n MB/s速度同步。

    • 如果設定為n-1 MB/s,則以n-1 MB/s速度同步。

  • 關係型資料庫設定作業速率上限和切分鍵後,才能根據作業速率上限將表進行切分。關係型資料庫通常只支援數值型作為切分鍵,但Oracle資料庫支援以數值型和字串類型作為切分鍵。

常見問題

附錄:查看實際並發

在資料同步任務的詳情日誌頁面,尋找形式為JobContainer - Job set Channel-Number to 2 channels.的日誌,此處的channels即為任務實際啟動並執行並發度。查看實際並發

附錄:並發度和資源的佔用關係

在獨享資源群組中,佔用關係包括並發度和CPU、記憶體的佔用關係:

  • 並發度和CPU的佔用關係

    在獨享資源群組中,並發度和CPU的佔用關係為1:0.5,即擁有一台4 vCPU 8 GiB規格的ECS機器,其獨享資源群組的並發額度為8。最多能夠同時運行8個並發度為1的離線同步任務,或4個並發度為2的離線同步任務。

    當新提交至獨享資源群組的任務所需要的並發度大於獨享資源群組剩餘的並發度額度時,新提交的任務將等待獨享資源群組中正在啟動並執行任務結束,直至剩餘的並發度額度滿足新提交任務的並發度需求。

    說明

    如果新提交任務設定的並發度超過獨享資源群組的最大並發額度,例如,向一台擁有4 vCPU 8 GiB規格的ECS機器的獨享資源群組提交一個並發度設定為10的任務,該任務將永遠處於等待資源的狀態。由於資源群組根據任務被提交的先後順序分配資源,後續提交的任務也將無法運行。

  • 並發度和記憶體的佔用關係

    在獨享資源群組中,單個任務的並發度和記憶體的佔用關係為Min{768+(並發數-1)*256,8029} MB。但是,您可以在任務中通過設定,覆蓋其對應關係。如果是指令碼模式,請在JSON結構的配置文本中,通過JSON路徑$.setting.jvmOption進行設定。jvm

    您需要確保所有正在啟動並執行任務使用記憶體的總和,比獨享資源群組中所有機器的記憶體總量小1 GB以上,任務才能平穩運行。如果未滿足該條件,會因為Linux系統的OOM Killer機制強制停止任務的運行。

    說明

    如果您未使用指令碼模式加大任務的記憶體,則只需要考慮獨享資源群組並發度的額度對任務提交的限制。

附錄:同步速度

不同資料來源的並發讀寫速度會有很大的差異。下文為您介紹典型資料來源在獨享資源群組中,單並發的同步速度:

  • 不同資料來源的Writer外掛程式對應的單並發平均速度

    Writer

    單並發平均速度(KB/s)

    AnalyticDB for PostgreSQL

    147.8

    AnalyticDB for MySQL

    181.3

    ClickHouse

    5259.3

    DataHub

    45.8

    DRDS

    93.1

    Elasticsearch

    74.0

    FTP

    565.6

    GDB

    17.1

    HBase

    2395.0

    hbase20xsql

    37.8

    HDFS

    1301.3

    Hive

    1960.4

    HybridDB for MySQL

    323.0

    HybridDB for PostgreSQL

    116.0

    Kafka

    0.9

    LogHub

    788.5

    MongoDB

    51.6

    MySQL

    54.9

    ODPS

    660.6

    Oracle

    66.7

    OSS

    3718.4

    OTS

    138.5

    PolarDB

    45.6

    PostgreSQL

    168.4

    Redis

    7846.7

    SQLServer

    8.3

    Stream

    116.1

    TSDB

    2.3

    Vertica

    272.0

  • 不同資料來源的Reader外掛程式對應的單並發平均速度

    Reader

    單並發平均速度(KB/s)

    AnalyticDB for PostgreSQL

    220.3

    AnalyticDB for MySQL

    248.6

    DRDS

    146.4

    Elasticsearch

    215.8

    FTP

    279.4

    HBase

    1605.6

    hbase20xsql

    465.3

    HDFS

    2202.9

    Hologres

    741.0

    HybridDB for MySQL

    111.3

    HybridDB for PostgreSQL

    496.9

    Kafka

    3117.2

    LogHub

    1014.1

    MongoDB

    361.3

    MySQL

    459.5

    ODPS

    207.2

    Oracle

    133.5

    OSS

    665.3

    OTS

    229.3

    OTSStream

    661.7

    PolarDB

    238.2

    PostgreSQL

    165.6

    RDBMS

    845.6

    SQLServer

    143.7

    Stream

    85.0

    Vertica

    454.3