数据同步任务调度运行时,您可能会遇到实例的执行时间超过预期的情况。本文为您介绍如何在数据同步任务实例执行慢、时间差异大等不满足预期的情况下进行调优的方法。

场景分类

通常数据同步任务执行慢的场景分为以下三种:

  • 任务开始运行的时间和调度时间差异比较大。
  • 任务长时间处于WAIT状态。
  • 任务同步的速率慢。

前提条件

正式开始数据同步任务调优前,请首先收集下列信息:
  • 任务运行日志(从日志开始打印到结束)
  • 任务的属性标签页信息
针对数据同步任务,DataWorks的调度资源分为一级调度资源和二级运行资源。
  • 一级调度资源: 可以在运维中心 > 周期任务 > 属性调度资源组中查看或配置。

  • 二级运行资源:可以在数据开发 > 任务资源组中配置 。任务资源组下的可选自定义资源组 需要在数据集成资源组中完成配置。

场景一:任务开始运行时间和调度时间差异比较大

在该场景下,您首先需要任务运行日志和任务属性标签页信息 。对比分析发现, 任务运行日志中开始running的时间和属性节点的调度时间是有差异的,时间主要耗费在等待调度上。

问题示例
  1. 运维中心中的周期任务页面查看用户任务的属性标签页查,发现调度时间在00:00, 但是开始运行时间在00:29,怀疑时间主要消耗在等待调度上。

  2. 在实例页面右键查看用户任务运行日志,任务从00:29分开始运行,00:30执行结束,整个任务执行仅仅花费了1分钟。说明本次任务本身执行无问题。


问题解法
  1. 首先建议您观察您的项目下是否有较多的任务同时调度。默认资源组下的一级调度资源有限, 同时调度的任务较多会有其他任务排队等待。
  2. 通常每天0点-2点是 业务调度的高峰期, 建议您的业务运行时间尽量避开高峰期 。

场景二:任务同步速率慢

在该场景下,通过任务运行日志分析,通常有两种情况:
  1. 任务一直在运行,但速率是0。
  2. 任务速率较低。

任务速率为0

查看运行日志,看到任务长时间处于run的状态,速率为0。通常是由于拉取的SQL执行比较慢(源数据库CPU负载高或网络流量占用高),或在拉取SQL前进行truncate等操作,导致处理时间较长。

问题示例
  1. 查看任务运行日志,任务长时间在run,速率为0。 从18:00开始到21:13结束。


  2. 查看运行日志信息有truncate操作记录,从18:00开始到21:13 truncate操作结束。

问题解法

综上,可以推断是truncate操作导致的同步任务慢,您可能需要检查源数据库truncate慢的原因。

任务速率慢

查看运行日志,看到任务同步速率不为0,但是速率慢。

问题示例
  1. 获取运行日志后,查看日志中信息同步速率确实比较慢, 约为1.93kb/s。

  2. 查看运行日志中同步时间消耗字段 WaitWriterTime、WaitReaderTime的信息, 发现WaitReaderTime时长较长,主要在等待读数据。

问题解法

针对速率比较慢的情况, 可以看下主要在等Writer还是Reader,如果是读或写慢,需要查看对应的源数据库或目的数据库的负载情况。