MaxComputeSql性能调优-阿里云开发者社区

开发者社区> 隐林> 正文

MaxComputeSql性能调优

简介:  转载自xiaorui         部分用户(尤其对外输出)使用MaxCompute(原Odps)时,由于对产品的使用层面和执行层面了解程度不同,导致提交的任务执行时间过长、占用了较多集群资源;严重的会导致失败、不仅需要投入支持同学精力协助解决、也影响了用户正常业务。 合并整理部分性能提升方法方
+关注继续查看

 转载自xiaorui
   
      部分用户(尤其对外输出)使用MaxCompute(原Odps)时,由于对产品的使用层面和执行层面了解程度不同,导致提交的任务执行时间过长、占用了较多集群资源;严重的会导致失败、不仅需要投入支持同学精力协助解决、也影响了用户正常业务。 合并整理部分性能提升方法方便支持用户查询和优化Sql,提高效率;部分需要原来手动调优的如mapjoin、ppd谓词下推注意分区位置等原有的调优设置在不断衍进的产品中都已实现了自动化调优、 不同阶段的产品调优参数和细节会有不一致、但是熟悉了调优思路和方法后可以做到举一反三、逐步深入。

一. 整体思路

      整体上,调优从底层到sql可以有多个层面的调优,随着产品的不断完善,部分调优已经实现了自动化。如果用户能熟悉常见的调优机制和执行原理,在开发执行sql、业务逻辑和相关参数设置调整来提高性能、可以做到事半功倍。
      1. 硬件及操作系统层面调优:包括磁盘I/O调优(多路复用等)、网络调优(缓冲区大小、连接数放大等)、内存调优(虚拟内存设置、内存控制等);
      2. 分布式计算平台及存储层面调优:存储格式设置、压缩格式设置、RPC调用设置、连接数控制设置、调度机制设置、block及分片设置、执行资源设置等;
      3. 业务逻辑层面及参数调整,除整体执行的调优外,对不同类型的操作进行参数级别的调优、针对聚合、连接、一读多写等修改为不同的sql或者设置不同的参数可以极大的提高性能;      
      4. Sql层面及应用层面的调优,重构sql写法、合并sql,大小表连接修改为mapjoin等,在odps2.0中已处理了自动mapjoin等、目前未升级用户及对外输出的用户仍需要修改sql来支持;
      不同层面调优及优缺点见下:
 

二. 场景及调优列举

1. 大小表关联修改为mapjoin,增加Mapjoin hint
方法及注意事项:

  • 所有指定的小表占用的内存总和不超过 512M
  • 多表Join时,最左边的两个表,不能同时是 Mapjoin 的表
  • 不同的关联方式(left/right/inner),对表的顺序有要求
    • left outer join 左表必须为大表
    • right outer join 右表必须为大表
    • inner join 左右表皆可为大表
  • full outer join 不能直接使用 mapjoin,修改为mapjoin + union all
  • 最新的发布版本上已经支持了automapjoin,可以根据join表的大小自动把小表转为mapjoin,对部分没有显示增加hint的sql和中间结果为小表的sql进行自动优化

2. 数据倾斜
数据倾斜表现:
任务进度长时间维持在99%,查看监控,只有少量 reduce 子任务未完成
单一 reduce 记录数与平均记录数差异多大,最长时长远大于平均时长
优化方法及注意事项:

  • 聚合倾斜,设置参数:set odps.sql.groupby.skewindata=true
  • 关联倾斜,设置参数:set odps.sql.skewinfo=tab1:(col1,col2)[(v1,v2),(v3,v4),...|(v1,v2),(v3,v4),...];set odps.sql.optimize.skewjoin=true
  • 关联倾斜,同时大小表,考虑修改为mapjoin
  • 具体问题具体分析:因为聚合key值null引起的数据倾斜,可以修改null为随机值,打撒数据分发到不同的instance执行

3. Map 端一读多写
场景及优化:
多次读取同一张物理表,执行不同操作,写入多张表;考虑与multiinsert 的联系和区别,是否合适做修改
建立临时表,实现临时表的并行化
注意事项:

  • 优点:大大节省了集群的计算资源和磁盘I/O资源
  • 缺点:写的次数非常多时,可能导致性能问题,影响任务整体执行效率

4 分区裁剪
场景:事实表很多分区,数据量大
优化:避免全表扫描,减少资源浪费;关注分区裁剪有无生效,见下注意事项:从表设计、使用上注意,尽量让分区裁剪生效
注意事项:

  • 过滤条件中的分区列上有UDF 则分区裁剪生效
  • 表关联时关联条件中包含分区列:
    • 出现在 on 条件中,分区裁剪生效
    • 出现在 where 条件中,主表分区裁剪生效,其余可能失败

5. SQL 合并
场景:
1. 多次读取相同的数据且源数据数据量大、性能差、费用高
2. 统一业务流程前后关联sql或统计多种指标、筛选不同数据的sql
优化方法及注意事项:通过修改sql,合并为1个sql执行,尽量减少对相同数据源的读取次数,达到一次扫描计算多个基础统计量,一次扫描,处理多个筛选条件;以下调整列举:

  • CASE … WHEN…:合并相同数据源的不同子查询的关联
  • 动态分区&多路插入等:将满足不同条件的会员统计信息插入到不同的表或表分区中去
  • 前后流程sql合并为1个sql执行

6 使用窗口函数优化SQL
窗口函数:
1. 可以进行灵活的分析处理工作
2. 使用 partition by 开窗,order by 排序
3. 可以用 rows 指定开窗范围
4. 丰富的开窗函数

优化及注意事项:合理使用窗口函数,可以减少Join次数,提高运行性能;不用窗口函数处理需要写复杂sql的功能,用开窗函数可以高效执行得到预期结果。


官方文档:https://help.aliyun.com/document_detail/27834.html


欢迎加入“数加·MaxCompute购买咨询”钉钉群(群号: 11782920)进行咨询,群二维码如下:

96e17df884ab556dc002c912fa736ef6558cbb51 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Android 号码查询性能优化
我的需求是做一个快速拨号界面!list列表显示所有联系人Calllog资料!原来的做法在前面的日志中有提到!大概是先查 Cursor phoneCursor = this.managedQuery( ContactsContract.
505 0
5月19日云栖精选夜读:性能追求之路——MaxCompute2.0的前世今生
《大数据计算服务MaxCompute产品最新动态》,首先介绍了MaxCompute的发展历程和技术架构,然后对MaxCompute 2.0版本新特性和新技术进行了详细介绍。
5788 0
spring源码学习【准备】之jdk动态代理和cglib动态代理的区别和性能
一:区别:---->JDK的动态代理依靠接口实现,如果有些类并没有实现接口,则不能使用JDK代理,这就要使用cglib动态代理了。--->JDK的动态代理机制只能代理实现了接口的类,而不能实现接口的类就不能实现JDK的动态代理,cglib是针对类来实现代理的,他的原理是对指定的目标类生成一个子类,并覆盖其中方法实现增强,但因为采用的是继承,所以不能对final修饰的类进行代理。
917 0
.NET性能调优之三:YSlow相关规则的调优工具和方法
.NET性能调优系列文章 系列文章索引 .NET性能调优之一:ANTS Performance Profiler的使用 .NET性能调优之二:使用Visual Studio进行代码度量 .NET性能调优之三:YSlow相关规则的调优工具和方法 1.YSlow简介 在这篇文章里来谈谈web前端的相关优化,主要遵从YSlow规则,具体的规则意义在YSlow的23条规则描述里已经描述的很清楚,不再赘述,那么这里主要来探讨下如何针对部分规则进行相关调优。
1099 0
《Oracle高性能SQL引擎剖析:SQL优化与调优机制详解》一2.4 执行计划各个操作的含义
本节书摘来自华章出版社《Oracle高性能SQL引擎剖析:SQL优化与调优机制详解》一 书中的第2章,第2.4节,作者:黄玮,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1569 0
sql server 性能调优 资源等待之网络I/O
原文:sql server 性能调优 资源等待之网络I/O 一.概述    与网络I/O相关的等待的主要是ASYNC_NETWORK_IO,是指当sql server返回数据结果集给客户端的时候,会先将结果集填充到输出缓存里(ouput cache),同时网络层会开始将输出缓存里的数据打包,由客户端接收。
957 0
基于commons-pool2实现KafkaProducer池来提升kafka发送消息性能
基于commons-pool2实现KafkaProducer池来提升kafka发送消息性能
1049 0
+关注
隐林
阿里云大数据产品专家,擅长MaxCompute、机器学习、分布式、可视化、人工智能等大数据领域;
288
文章
38
问答
来源圈子
更多
MaxCompute(原ODPS)是一项面向分析的大数据计算服务,它以Serverless架构提供快速、全托管的在线数据仓库服务,消除传统数据平台在资源扩展性和弹性方面的限制,最小化用户运维投入,使您经济并高效的分析处理海量数据。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载