由一个JOIN不等值联结引发的DataWorks任务运行时间超长的问题排查以及解决

一、问题引入

依赖同事的一个表,发现今天任务产出特别晚,查询运行日志发现,运行了5个多小时
在这里插入图片描述

二、问题排查

1、查看SQL

在这里插入图片描述

SQL由多个JOIN组成,且较复杂,先猜测是数据倾斜造成的,但是改造后效果不理想。

2、查看日志,但在同一个作业里写了多段SQL,日志并不明显。

3、将SQL复制出来单独执行,并且与线上日志对比

在这里插入图片描述

本地执行时,发现卡在此处。对比线上日志,
在这里插入图片描述

耗时较长的task相同。
对比本地执行时的缩略图,大概能看出来是在执行哪一段SQL。
在这里插入图片描述

对应SQL
在这里插入图片描述

猜测是由不等值联结造成的,改造SQL,如下
AND substr(t1.day_str,1,10) = date_sub(t3.day_str,1)
再次执行,时间直接缩短到3分钟
在这里插入图片描述

4、小插曲:

在排查的过程中,有一个表用了开发环境数据(注:开发环境的数据少,可能影响测试的结果),在与同事对问题的时候发现了,但是改过来之后,还是在几分钟中执行完了。

三、问题总结:

1、任务要配置超时监控,像这种运行5个小时的任务要及时发现
2、在JOIN时,尽量不要写不等值联结。
3、排查问题的时候,不要在查询窗口执行,发现速度还可以就跳过,查询窗口有足够多的数据的时候就会返回,并不能反应真实的问题,如果想模拟线上的相同操作(会执行全部数据,反应出问题)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值