数据同步任务调度运行时,您可能会遇到实例的执行时间超过预期的情况。本文为您介绍如何在数据同步任务实例执行慢、时间差异大等不满足预期的情况下进行任务调优。
前提条件
正式开始数据同步任务调优前,请首先获取任务的运行日志和属性信息。
针对数据同步任务,DataWorks的调度资源分为一级调度资源和二级运行资源。
- 一级调度资源: 您可以进入页面,右键单击相应节点,选择查看更多详情,即可查看该节点的属性。 
- 二级运行资源:您可以进入页面,新增和查看二级任务运行资源。 
背景信息
通常数据同步任务执行慢的场景分为以下三种:
- 任务开始运行的时间和调度时间差异比较大。 
- 任务长时间处于WAIT状态。 
- 任务同步的速率慢。 
场景一:任务开始运行时间和调度时间差异较大
在任务开始运行时间和调度时间差异较大的情况下,您首先需要获取任务的运行日志和属性信息。经过对比发现, 运行日志中开始运行的时间和节点属性中的调度时间有差异,时间主要耗费在等待调度上。
问题示例
- 在运维中心中的页面,右键单击相应节点,选择查看更多详情,查看节点的属性,发现调度时间在00:00。但是开始运行的时间在00:29,推测时间主要消耗在等待调度上。  
- 在页面,右键单击相应实例,选择查看运行日志。查看任务从00:29开始运行,在00:30运行结束,整个任务执行仅花费了1分钟。说明本次任务本身的执行无问题。 
解决方法
- 首先建议您确认工作空间下是否有较多的任务同时进行调度。默认资源组下的一级调度资源有限,如果有较多的任务同时进行调度,会导致其它任务排队等待。 
- 通常每天0点~2点是业务调度的高峰期,建议您设置的业务运行时间尽量避开高峰期 。 
场景二:同步任务一直运行,但速率为0
查看运行日志时,发现任务长时间处于运行状态,但速率为0。通常是由于拉取的SQL执行比较慢(源数据库CPU负载高或网络流量占用高),或在拉取SQL前进行truncate等操作,导致处理时间较长。
问题示例
- 查看任务运行日志,任务长时间执行,但速率为0,从18:00开始到21:13结束。   
- 查看运行日志中存在truncate操作记录,从18:00开始到21:13结束。  
解决方法
如问题示例所示,可能是truncate操作导致的同步任务慢,您需要检查源数据库truncate慢的原因。
场景三:同步任务的速率较低
查看运行日志时,发现任务同步速率不为0,但是速率较低。
问题示例
- 获取运行日志后,查看日志中的同步速率较低,约为1.93KB/s。  
- 查看运行日志中的同步时间消耗字段WaitWriterTime、WaitReaderTime等信息,发现WaitReaderTime时间较长,主要在等待读数据。  
解决方法
针对速率比较慢的情况,您可以查看主要在等Writer还是Reader,如果是读写过程较慢,请查看对应的源数据库或目标数据库的负载情况。