全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网
DataWorks(数据工场)

调优同步数据速度

更新时间:2017-11-08 15:32:55

数据同步速度的快慢一直是用户非常关心的问题,由于影响数据同步速度的因素比较多,所以很多用户不能很好地控制数据同步的速度。根据数据同步的流程,数据同步分为三大部分:数据源端、数据集成目标端 。本文将根据这三个部分,分析数据同步慢的原因。

数据同步速度的影响因素

影响数据同步速度的因素,可从以下几方面进行考虑:

  • 数据源

    • 性能:CPU、内存、SSD 硬盘、网络、硬盘。

    • 并发数:如果数据源并发数高,数据库负载便高。

    • 网络:网络的带宽(吞吐量),网速。
  • 数据同步

    • 传输速度:设置 speed。
    • WAIT 资源。

    • Bytes 的设置:单个线程的 Bytes = 1048576,在网速比较敏感时,会出现超时现象,建议设置小一些。

    • 查询语句是否建索引。

  • 目的端

    • 性能:CPU、内存、SSD 硬盘、网络、硬盘。
    • 目的数据库负载过高。

    • 网络:网络的带宽(吞吐量),网速。

数据同步过慢的场景

数据同步传输速度设置引起速度变慢并解释日志数率

场景示例

导入 7G 数据到 MaxCompute 花费两个小时,若选择 10MB 的速度就会报堆栈溢出,只能选择 5MB,而实际导入速度只有 1.5MB 左右。

解决方法

配置的 5MBPS 表示最多 5 个线程并发执行同步任务,每个线程 1MBPS,这样整体作业最大速度是 5MBPS。一个线程能否完成 1MBPS 的同步和数据库能力(数据获取能力)、网络情况等相关,这个速度是数加同步中心提供的速度上限,不一定能完全达到,速度越大占用的内存越大。

同步任务使用公共调度(WAIT)资源时一直在等待状态

场景示例

在 DataWorks(数据工场,原大数据开发套件)中对任务运行测试时,出现任务一直等待的状态,或好多测试任务都处于等待状态,而且还提示了系统内部错误。示例如下:

比如一个数据同步任务执行完成,共等待了大概 800s,但是日志显示任务只运行了 18s,使用的是默认资源组,现在运行其他同步任务,也是 RDS 到 MaxCompute ,一共几百条数据,一直处于等待中 。

显示等待日志:

  1. 2017-01-03 07:16:54 : State: 2(WAIT) | Total: 0R 0B | Speed: 0R/s 0B/s | Error: 0R 0B | Stage: 0.0%

解决方法

因为您使用的是公共调度资源,公共资源能力是受限的有很多项目都在使用,不只是单个用户的 2-3 个任务,任务实际运行 10 秒,但是延长到 800 秒,是因为您的任务下发执行时,发现资源不足,需等待获取资源。

如果对于同步速度和等待时间比较敏感,建议在低峰期配置同步任务,一般晚上零点到 3 点同步任务比较多,这样可以避开零点到 3 点的时间段,便可相对减少等待资源的情况。

提高多个任务导入数据到同一张表的同步速度

场景示例

想要将多个数据源的表同步到一张表里,所以将同步任务设置成串行任务,但是最后发现同步时间很长。

解决方法

可以同时启动多个任务,同时往一个数据库进行写入,注意以下几方面:

  • 确保目标数据库负载能力是能够承受,避免不能正常工作。

  • 在配置工作流任务,可以选择单个任务节点,配置分库分表任务或者在一个工作流中设置多个节点同时执行。

  • 如果任务执行时,出现等待资源(WAIT)情况,可以低峰期配置同步任务,这样任务有较高的执行优先级。

数据同步任务 where 条件没有索引,导致全表扫描同步变慢

场景示例

执行的 SQL 如下所示:

  1. select bid,inviter,uid,createTime from `relatives` where createTime>='2016-10-2300:00:00'and reateTime<'2016-10-24 00:00:00';

从 2016-10-25 11:01:24.875 开始执行,到 2016-10-25 11:11:05.489 开始返回结果。同步程序在等待数据库返回 SQL 查询结果,MaxCompute 需等待很久才能执行。

分析原因

where 条件查询时,createTime 列没有索引,导致查询全表扫描。

解决方法

建议 where 条件使用有索引相关的列,提高性能,索引也可以补充添加。

本文导读目录