摘要: 头疼的问题 MaxCompute 用户一个常见的问题是:同一个周期任务,为什么最近几天比之前慢了很多?或者为什么之前都能按时产出的作业最近经常破线? 通常来说,引起作业执行变慢的原因有:quota 组资源不足、输入数据量变动、数据分布情况变动、平台硬件故障引发重跑等。
头疼的问题
MaxCompute 用户一个常见的问题是:同一个周期任务,为什么最近几天比之前慢了很多?或者为什么之前都能按时产出的作业最近经常破线?
通常来说,引起作业执行变慢的原因有:quota 组资源不足、输入数据量变动、数据分布情况变动、平台硬件故障引发重跑等。本文主要针对数据变动引起的作业慢问题,介绍用户如何通过 MaxCompute Studio 的作业执行图及作业详情功能来自助定位问题。
MaxCompute Studio 登场
我们举个例子来说。 下面是同一个任务分别在5月7日,5月9日的执行情况,下面分别称为作业一、作业二:
作业一,执行时长 24分38秒
作业二,执行时长 9分40秒
先来,对比下 SQL 和执行计划
通常来说,进行两次执行对比前,要先对比一下两次执行的 SQL 脚本是否相同,如果在这之间用户改动过作业脚本,就需要先分析改动的部分造成的影响。如果脚本内容一致,随后还需要比较执行计划是否一致,可以通过 MaxCompute Studio 的作业执行计划图功能来分析(参看文档),可视化地看看两次执行的计划图长得一样不一样。 (作业对比的功能正在开发中,下个版本的 Studio 中就可以一键对比两个作业,标注出 SQL 脚本及其它部分的不同之处啦,敬请期待)
在上面这个例子中两个作业的 SQL 脚本及执行计划完全一致,出于数据安全考虑,此处不粘贴具体 SQL 的内容。
再来,对比数据量
第二步要看一下作业输入数据量有没有明显变化,有可能是某一天输入表或分区的数据量暴涨导致了作业执行变慢。作业输入数据在 Detail 页面左侧,那里列出了这个作业所有输入的数据表和最终输出的数据表。 展开 输入->Table Name 可以查看详细信息,包括是哪个 Fuxi 任务读取了这个表,读取了多少条记录以及读取的数据量大小。这些信息,也标注在作业执行计划图 graph 上,方便查看。如下图所示,
作业一的输入表及读取数据
作业二的输入表及读取数据
也可以从graph上直接读取输入行数或者字节数(默认展示行数,可在边上右键切换为字节数):
作业一 graph输入行数
作业二 graph输入行数
在这个例子中,从输入数据量来看,两次执行的输入数据量差别不大。
作业回放是把利器
第三步,那到底作业运行情况是怎样的呢?运行那么长时间,或花费在哪儿了呢?不急,快快使用作业回放!
在 Studio 中作业执行计划图底部提供的作业回放工具条,允许用户在 30 秒内快速回放作业执行进度的全过程!这样我们就可以迅速地了解到底是哪个 Task 耗时最多,或者处理得数据最多,或者输出的数据最多等等。
通过回放重现作业执行过程,Studio 提供进度图以及热度图方便从不同维度进行作业分析。
作业一 进度图回放
作业二 进度图回放
从回放中可以看出
(1)J6_2_4_5 task是整个作业瓶颈,时间消耗最多,从task热度图中也能发现该节点明显热于其它节点。(时间热度图上越红代表运行时间越长,数据热度图上越红代表处理数据越多)
(2)同时对比两个作业的回放过程,能够比较明显地发现作业一在J6_2_4_5运行时长要大于作业二,说明作业一在J6_2_4_5阶段变慢了,初步怀疑有长尾节点产生。
接下来切换到时序图tab,比较两个作业的执行timeline:
作业一 执行timeline
作业二 执行timeline
虽然两个作业timeline的时间尺度不同,但是可以明显看出,作业一中J6_2_4_5 占了更长的比例,由此可以断定是J6_2_4_5 在05-07执行(也就是作业一)发生可能长尾,导致整个作业执行变慢。
进入深水区
第四步,通过graph或detail tab 对比J6_2_4_5 的输入数据量
作业一 detail tab
作业二 detail tab
关注上图中J6_2_4_5 输入数据量和统计信息,通过比较可看出,两次执行的J6_2_4_5 输入数据量基本相同,1.58万亿字节 vs 1.7万亿字节,从统计信息来看,累计执行时间及平均时间也基本相同:292398 vs 307628, 72s vs 76s 但作业一 fuxi instances中的最长执行时间为710s, 由此可以认定是某几个fuxi instance长尾导致了J6_2_4_5 这个fuxi task的长尾。
第五步,对两个 J6_2_4_5 fuxi instance 列表按照latency 排序:
作业一
作业二
或者转到分析tab下的长尾页面查找长尾节点:注意这个图中的比例尺是以等比而不是等差方式标定的,因此,上面突出的比较长的毛刺就很可能是长尾的实例了。可以通过浮动窗口中的具体信息来判断。 另外 Studio 也提供了诊断的页面,来自动找出超过平均实例执行时间两倍的长尾实例。
作业一
作业二
从上面fuxi instance 输入数据对比可以确定,因为J6_2_4_5#1912_0 这个instance 数据倾斜导致整个作业一长尾。即J6_2_4_5#1912_0 是latency排第二的输入数据量的7倍!
渐入佳境,刨根问底
第六步,查看单个instance的执行日志,并通过job graph分析J6_2_4_5的具体执行计划,找到导致长尾的数据来源。
打开J6_2_4_5的operator graph, 可以看到有两个join:Merge Join2和Merge Join3,这里以Merge Join2为例展示如何查找数据来源。
从Merge Join2中可看到join key:_col13, user_id。 其中_col13 来自于J5, 点开J5后发现_col13来自IF(ISNULL(HOT_SELLER_MAP(sellerid)),sellerid,CONCAT(seller,TOSTRING(RAND()))) 说明_col13由seller决定,该seller来自于M4和M3。
J5 operator详细信息
分别打开M4和M3的Operator详细信息,可以看到seller 分别来自tmp_s_dw_log_app_user_track_pre_1_20180508 和dim_feed_shop。
M4 Operator详细信息
M3 Operator详细信息
同理可以分析出Merge Join2 的user_id 来自于dim_tb_shop。
最后,通过写sql模拟产生对应的userid及_col13,比较这两个字段的数据量大小,在针对sql脚本进行优化即可。
相关推荐
SQL Server Management Studio(简称SSMS)是微软公司为数据库管理员和开发人员提供的一款强大图形化管理工具。它专为管理和维护SQL Server而设计,支持SQL Server 2008和SQL Server 2012等不同版本,是数据库开发者...
拓展游戏:善用注意力.pdf
Sql Server语句自动提示插件是一款为数据库开发者和管理员提供便利的工具,它极大地提高了编写SQL语句的效率。在数据库开发过程中,手动输入复杂的SQL命令可能会耗费大量时间,而这款插件则能够通过智能提示功能,...
然而,大数据的广泛应用也带来了一系列挑战。首要问题便是数据隐私和信息安全。如支付宝的安全漏洞事件警示我们,个人数据的保护工作亟待加强。政府和企业在追求数据价值的同时,必须确保公民的隐私权不受侵犯。此外...
在《善用法律》这门课的学情分析中,我们关注以下几个关键方面: 1. **学生原有的知识和技能**:在教授新内容前,教师需要了解学生已经掌握了哪些关于法律的基础知识和技能,如学生是否了解基本的法律常识。在...
对于那些经常处理复杂SQL的开发人员来说,SQL Server智能分析器RedGate SQL Prompt V5.3.4.1无疑是一个强大的生产力提升工具。 总之,掌握并运用好SQL智能提示工具,可以显著提高SQL Server数据库的开发和维护效率...
SQL语句生成及分析器是一款强大的工具,专为IT专业人士设计,用于自动化SQL语句的创建和解析过程。SQL(Structured Query Language)是用于管理关系数据库的标准编程语言,包括数据查询、更新、插入和删除等操作。这...
### 电商企业如何善用数据分析 #### 一、数据分析的概念及其在电商中的应用 数据分析是指通过对收集到的数据进行处理、组织、展示和解释的过程,从而提取有用的信息并得出结论。在电子商务领域,数据分析主要应用...
《深入理解Java SQL解析器:JSQLParser》 在Java编程领域,处理SQL语句时,我们常常需要对SQL进行解析,以便理解其结构、验证语法或者转换为...在实际开发中,善用JSQLParser,可以极大地提升SQL处理的效率和质量。
一个人性化、功能强大的SQL数据查询工具能够极大地提升工作效率,使得数据处理变得更为简单易懂。本文将深入探讨如何利用这样一款工具进行有效的工作,并分享其关键特点和优势。 首先,我们关注的重点是“人性化”...
例如,"SQLPrompt+v5.3.0.3.exe"可能是一款名为SQLPrompt的SQL格式化插件,该版本为v5.3.0.3。这个工具通常具备以下功能: 1. **代码自动格式化**:当用户输入SQL语句时,工具会自动调整代码的排列,包括缩进、换行...
【标题】:“kayit-botu:善用” 在IT领域,尤其是互联网社区管理中,自动化的工具常常被用来提高效率和维护秩序。"kayit-botu"(记录机器人)是一个这样的工具,专用于识别和处理不和谐的表情符号。这款机器人基于...
它通过分析查询语句,生成执行计划,选择最优的方式来执行SQL语句。理解查询优化器的工作原理,包括成本估算和执行计划的选择,对于优化至关重要。 2. **索引优化**:索引是提升查询速度的关键。了解不同类型的索引...
SysTools SQL Log Analyzer 8.0 x64是一款专为64位操作系统设计的专业工具,它允许用户对SQL Server的日志进行深度分析,从而获取宝贵的性能信息和潜在问题。本文将详细介绍该工具的主要功能、应用场景以及如何利用...
在数据库管理与优化领域,SQL优化是一个至关重要的环节。良好的SQL语句不仅能够提高数据检索的效率,还能降低系统的负载,从而提升整个应用的性能。本文件通过案例分析的方式,展示如何快速有效地缩短SQL优化过程。...
PL/SQL Developer是一款专为Oracle数据库设计的集成开发环境(IDE),它由Allround Automations公司开发,主要用于编写、调试、测试和管理PL/SQL代码。V7.1.5是该软件的一个版本,提供了对PL/SQL语言的强大支持,...
SqlHelper作为一款广泛使用的数据访问通用类,它为开发者提供了方便快捷的SQL操作接口,尤其适用于Visual Studio 2005和Visual Studio 2008等早期版本的开发环境。SqlHelper类库简化了对数据库的操作,降低了代码...
在数据库应用中,PL/SQL(Procedural Language/Structured Query Language)是Oracle数据库系统中的一个强大编程语言,它结合了SQL的查询能力与过程化编程的灵活性。优化PL/SQL语句对于提升数据库性能至关重要,尤其...
SQLPrompt是一款强大的SQL编码辅助工具,专为SQL Server设计,旨在提高开发人员的生产力和代码质量。该软件的7.2.2.273版本提供了丰富的功能,包括对象提示、T-SQL的格式化以及其他的高效编程特性。在本文中,我们将...