本文為您介紹影響資料同步速度的因素、如何通過調整同步任務的並發配置來實現同步速度最大化、作業的限速選項,以及資料同步過慢的情境。
文檔概述
同步速度受同步任務本身配置、資料庫、網路等多方面影響,詳情請參見:資料同步速度的影響因素。
同步任務整體速度慢可能出現在同步過程的各個階段,本文以現象入手,為您提供各個階段運行慢的解決方案,詳情請參見:資料同步慢的情境及解決方案。
在資料庫效能限制的情況下,同步速度並非越快越好,考慮到速度過高可能對資料庫造成過大的壓力從而影響生產,Data Integration支援了限速選項,您可根據業務合理配置該值。詳情請參見:限制同步速度。
資料同步速度的影響因素
資料同步速度受來源與目標端資料庫環境及同步任務配置等因素影響,其中源端和目的端資料庫的效能、負載和網路情況主要由您自己關注並進行調優。
影響資料同步速度的因素如下:
因素 | 說明 |
來源端資料來源 |
|
離線同步任務使用的調度資源群組 | 離線同步任務將有調度資源下發至Data Integration任務執行資源上執行,調度資源使用方式同樣會影響整體Data Integration同步效率。關於離線任務下發機制,詳情請參見:任務下發機制。 |
離線同步任務配置 |
|
目的端資料來源 |
|
資料同步慢的情境及解決方案
離線同步任務日誌詳情請參見:離線同步處理記錄分析。
資料同步慢的情境 | 現象 | 可能原因 | 解決方案 |
等待調度資源 |
| 離線任務由調度資源群組下發至引擎執行,因此,當離線任務調度資源群組執行任務數到達上限,則需要等待資源群組上執行的任務執行結束,釋放資源。 | 您可以在運行診斷頁面查看當前任務等待資源時,哪些任務佔用資源。 說明 若使用公用調度資源群組,建議遷移到獨享資源群組上執行。 |
等待執行資源 | 同步任務日誌顯示wait。 | 當前Data Integration任務執行資源組剩餘資源不夠當前任務執行。 例如,資源群組最大支援8個並發同時執行,若當前存在3個並發為3的任務,其中2個任務同時執行,那麼機器剩餘的並發為2,此時另一個並發為3的任務將由於資源群組剩餘資源不夠,導致當前任務進入等待狀態,日誌顯示wait。 | 檢查資源群組下是否有其他任務運行佔用了大量資源,您可以通過以下方案解決此類問題:
|
同步任務運行速度過慢 | 同步任務日誌顯示run,但速度為0。此類情況任務並非未執行,如果長時間處於該狀態,建議單擊Detail log查看詳細執行情況。若Detail log中顯示WaitReaderTime參數值大,表示等待從源端返回資料時間較長。 |
說明 無法保障公網環境下的資料同步速度。 |
|
同步任務日誌顯示run,但速度為0。此類情況任務並非未執行,如果長時間處於該狀態,建議單擊Detail log查看詳細執行情況。若Detail log中顯示WaitWriterTime參數值大,表示寫入目標端時間較長。 |
說明 無法保障公網環境下的資料同步速度。 | ||
日誌顯示run,有速度,但同步過程速度慢。 |
說明 無法保障公網環境下的資料同步速度。 |
限制同步速度
Data Integration同步任務預設不限速,任務將在所配置的並發數的限制上以最高能達到的速度進行同步。另一方面,考慮到速度過高可能對資料庫造成過大的壓力從而影響生產,Data Integration同時提供了限速選項,您可以按照實際情況調優配置(建議選擇限速之後,最高速度上限不應超過30 MB/s)。指令碼模式通過如下範例程式碼配置限速,代表1 MB/s的傳輸頻寬。
"setting": {
"speed": {
"throttle": true // 是否限流。
"mbps": 1, // 具體速率值。
}
}
throttle包括true和false:
當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資料庫支援以數值型和字串類型作為切分鍵。
常見問題
BatchSize或maxfilesize參數控制一次性批量提交的記錄數大小,該值可以減少資料同步與資料庫網路互動次數,並提升輸送量。但如果該值設定過大,會導致資料同步運行進程OOM異常。出現上述報錯後,請參見:離線同步常見問題。
附錄:查看實際並發
在資料同步任務的詳情日誌頁面,尋找形式為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進行設定。
您需要確保所有正在啟動並執行任務使用記憶體的總和,比獨享資源群組中所有機器的記憶體總量小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