離線同步提速或限速
本文為您介紹影響數(shù)據(jù)同步速度的因素、如何通過調(diào)整同步任務(wù)的并發(fā)配置來實現(xiàn)同步速度最大化、作業(yè)的限速選項,以及數(shù)據(jù)同步過慢的場景。
文檔概述
同步速度受同步任務(wù)本身配置、數(shù)據(jù)庫、網(wǎng)絡(luò)等多方面影響,詳情請參見:數(shù)據(jù)同步速度的影響因素。
同步任務(wù)整體速度慢可能出現(xiàn)在同步過程的各個階段,本文以現(xiàn)象入手,為您提供各個階段運行慢的解決方案,詳情請參見:數(shù)據(jù)同步慢的場景及解決方案。
在數(shù)據(jù)庫性能限制的情況下,同步速度并非越快越好,考慮到速度過高可能對數(shù)據(jù)庫造成過大的壓力從而影響生產(chǎn),數(shù)據(jù)集成支持了限速選項,您可根據(jù)業(yè)務(wù)合理配置該值。詳情請參見:限制同步速度。
數(shù)據(jù)同步速度的影響因素
數(shù)據(jù)同步速度受來源與目標(biāo)端數(shù)據(jù)庫環(huán)境及同步任務(wù)配置等因素影響,其中源端和目的端數(shù)據(jù)庫的性能、負(fù)載和網(wǎng)絡(luò)情況主要由您自己關(guān)注并進(jìn)行調(diào)優(yōu)。
影響數(shù)據(jù)同步速度的因素如下:
因素 | 說明 |
來源端數(shù)據(jù)源 |
|
離線同步任務(wù)使用的調(diào)度資源組 | 離線同步任務(wù)將有調(diào)度資源下發(fā)至數(shù)據(jù)集成任務(wù)執(zhí)行資源上執(zhí)行,調(diào)度資源使用情況同樣會影響整體數(shù)據(jù)集成同步效率。關(guān)于離線任務(wù)下發(fā)機制,詳情請參見:任務(wù)下發(fā)機制。 |
離線同步任務(wù)配置 |
|
目的端數(shù)據(jù)源 |
|
數(shù)據(jù)同步慢的場景及解決方案
離線同步任務(wù)日志詳情請參見:離線同步日志分析。
數(shù)據(jù)同步慢的場景 | 現(xiàn)象 | 可能原因 | 解決方案 |
等待調(diào)度資源 |
| 離線任務(wù)由調(diào)度資源組下發(fā)至引擎執(zhí)行,因此,當(dāng)離線任務(wù)調(diào)度資源組執(zhí)行任務(wù)數(shù)到達(dá)上限,則需要等待資源組上執(zhí)行的任務(wù)執(zhí)行結(jié)束,釋放資源。 | 您可以在運行診斷頁面查看當(dāng)前任務(wù)等待資源時,哪些任務(wù)占用資源。 說明 若使用公共調(diào)度資源組,建議遷移到獨享資源組上執(zhí)行。 |
等待執(zhí)行資源 | 同步任務(wù)日志顯示wait。 | 當(dāng)前數(shù)據(jù)集成任務(wù)執(zhí)行資源組剩余資源不夠當(dāng)前任務(wù)執(zhí)行。 例如,資源組最大支持8個并發(fā)同時執(zhí)行,若當(dāng)前存在3個并發(fā)為3的任務(wù),其中2個任務(wù)同時執(zhí)行,那么機器剩余的并發(fā)為2,此時另一個并發(fā)為3的任務(wù)將由于資源組剩余資源不夠,導(dǎo)致當(dāng)前任務(wù)進(jìn)入等待狀態(tài),日志顯示wait。 | 檢查資源組下是否有其他任務(wù)運行占用了大量資源,您可以通過以下方案解決此類問題: 說明
|
同步任務(wù)運行速度過慢 | 同步任務(wù)日志顯示run,但速度為0。此類情況任務(wù)并非未執(zhí)行,如果長時間處于該狀態(tài),建議單擊Detail log查看詳細(xì)執(zhí)行情況。若Detail log中顯示WaitReaderTime參數(shù)值大,表示等待從源端返回數(shù)據(jù)時間較長。 |
說明 無法保障公網(wǎng)環(huán)境下的數(shù)據(jù)同步速度。 |
|
同步任務(wù)日志顯示run,但速度為0。此類情況任務(wù)并非未執(zhí)行,如果長時間處于該狀態(tài),建議單擊Detail log查看詳細(xì)執(zhí)行情況。若Detail log中顯示WaitWriterTime參數(shù)值大,表示寫入目標(biāo)端時間較長。 |
說明 無法保障公網(wǎng)環(huán)境下的數(shù)據(jù)同步速度。 | ||
日志顯示run,有速度,但同步過程速度慢。 |
說明 無法保障公網(wǎng)環(huán)境下的數(shù)據(jù)同步速度。 |
|
限制同步速度
數(shù)據(jù)集成同步任務(wù)默認(rèn)不限速,任務(wù)將在所配置的并發(fā)數(shù)的限制上以最高能達(dá)到的速度進(jìn)行同步。另一方面,考慮到速度過高可能對數(shù)據(jù)庫造成過大的壓力從而影響生產(chǎn),數(shù)據(jù)集成同時提供了限速選項,您可以按照實際情況調(diào)優(yōu)配置(建議選擇限速之后,最高速度上限不應(yīng)超過30 MB/s)。腳本模式通過如下示例代碼配置限速,代表1 MB/s的傳輸帶寬。
"setting": {
"speed": {
"throttle": true // 是否限流。
"mbps": 1, // 具體速率值。
}
}
throttle包括true和false:
當(dāng)throttle設(shè)置為true時,表示限速,您必須設(shè)置mbps具體的數(shù)據(jù)值。如果沒有設(shè)置mbps,程序運行將會出錯或者速率異常。
當(dāng)throttle設(shè)置為false時,表示不限速,則mbps的配置無意義。
流量度量值是數(shù)據(jù)集成本身的度量值,不代表實際網(wǎng)卡流量。通常,網(wǎng)卡流量往往是通道流量膨脹的1至2倍,實際流量膨脹取決于具體的數(shù)據(jù)存儲系統(tǒng)傳輸序列化情況。
半結(jié)構(gòu)化的單個文件沒有切分鍵的概念,多個文件可以設(shè)置作業(yè)速率上限來提高同步的速度,但作業(yè)速率上限和文件的個數(shù)有關(guān)。
例如,有n個文件,作業(yè)速率上限最多設(shè)置為n MB/s:
如果設(shè)置n+1 MB/s,還是以n MB/s速度同步。
如果設(shè)置為n-1 MB/s,則以n-1 MB/s速度同步。
關(guān)系型數(shù)據(jù)庫設(shè)置作業(yè)速率上限和切分鍵后,才能根據(jù)作業(yè)速率上限將表進(jìn)行切分。關(guān)系型數(shù)據(jù)庫通常只支持?jǐn)?shù)值型作為切分鍵,但Oracle數(shù)據(jù)庫支持以數(shù)值型和字符串類型作為切分鍵。
常見問題
BatchSize或maxfilesize參數(shù)控制一次性批量提交的記錄數(shù)大小,該值可以減少數(shù)據(jù)同步與數(shù)據(jù)庫網(wǎng)絡(luò)交互次數(shù),并提升吞吐量。但如果該值設(shè)置過大,會導(dǎo)致數(shù)據(jù)同步運行進(jìn)程OOM異常。出現(xiàn)上述報錯后,請參見:離線同步常見問題。
附錄:查看實際并發(fā)
在數(shù)據(jù)同步任務(wù)的詳情日志頁面,查找形式為JobContainer - Job set Channel-Number to 2 channels.的日志,此處的channels即為任務(wù)實際運行的并發(fā)度。
附錄:并發(fā)度和資源的占用關(guān)系
在獨享資源組中,占用關(guān)系包括并發(fā)度和CPU、內(nèi)存的占用關(guān)系:
并發(fā)度和CPU的占用關(guān)系
在獨享資源組中,并發(fā)度和CPU的占用關(guān)系為1:0.5,即擁有一臺4 vCPU 8 GiB規(guī)格的ECS機器,其獨享資源組的并發(fā)額度為8。最多能夠同時運行8個并發(fā)度為1的離線同步任務(wù),或4個并發(fā)度為2的離線同步任務(wù)。
當(dāng)新提交至獨享資源組的任務(wù)所需要的并發(fā)度大于獨享資源組剩余的并發(fā)度額度時,新提交的任務(wù)將等待獨享資源組中正在運行的任務(wù)結(jié)束,直至剩余的并發(fā)度額度滿足新提交任務(wù)的并發(fā)度需求。
說明如果新提交任務(wù)設(shè)置的并發(fā)度超過獨享資源組的最大并發(fā)額度,例如,向一臺擁有4 vCPU 8 GiB規(guī)格的ECS機器的獨享資源組提交一個并發(fā)度設(shè)置為10的任務(wù),該任務(wù)將永遠(yuǎn)處于等待資源的狀態(tài)。由于資源組根據(jù)任務(wù)被提交的先后順序分配資源,后續(xù)提交的任務(wù)也將無法運行。
并發(fā)度和內(nèi)存的占用關(guān)系
在獨享資源組中,單個任務(wù)的并發(fā)度和內(nèi)存的占用關(guān)系為Min{768+(并發(fā)數(shù)-1)*256,8029} MB。但是,您可以在任務(wù)中通過設(shè)置,覆蓋其對應(yīng)關(guān)系。如果是腳本模式,請在JSON結(jié)構(gòu)的配置文本中,通過JSON路徑$.setting.jvmOption進(jìn)行設(shè)置。
您需要確保所有正在運行的任務(wù)使用內(nèi)存的總和,比獨享資源組中所有機器的內(nèi)存總量小1 GB以上,任務(wù)才能平穩(wěn)運行。如果未滿足該條件,會因為Linux系統(tǒng)的OOM Killer機制強制停止任務(wù)的運行。
說明如果您未使用腳本模式加大任務(wù)的內(nèi)存,則只需要考慮獨享資源組并發(fā)度的額度對任務(wù)提交的限制。
附錄:同步速度
不同數(shù)據(jù)源的并發(fā)讀寫速度會有很大的差異。下文為您介紹典型數(shù)據(jù)源在獨享資源組中,單并發(fā)的同步速度:
不同數(shù)據(jù)源的Writer插件對應(yīng)的單并發(fā)平均速度
Writer
單并發(fā)平均速度(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
不同數(shù)據(jù)源的Reader插件對應(yīng)的單并發(fā)平均速度
Reader
單并發(fā)平均速度(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