摘要: 转载自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的功能,用开窗函数可以高效执行得到预期结果。

原文链接

干货好文,请关注扫描以下二维码:

MaxComputeSql性能调优相关推荐

  1. hive性能调优实战pdf_Nginx 性能调优实战

    来自:Linux社区 1.Nginx运行工作进程数量 Nginx运行工作进程个数一般设置CPU的核心或者核心数x2.如果不了解cpu的核数,可以top命令之后按1看出来,也可以查看/proc/cpui ...

  2. jvm调优工具_JVM性能调优监控工具jps、jstack、jmap、jhat、hprof使用详解

    来自:ITeye博客, 作者:Josh_Persistence 链接:https://www.iteye.com/blog/josh-persistence-2161848 现实企业级Java应用开发 ...

  3. ELASTIC SEARCH 性能调优

    ELASTICSEARCH 性能调优建议 创建索引调优 1.在创建索引的使用使用批量的方式导入到ES. 2.使用多线程的方式导入数据库. 3.增加默认刷新时间. 默认的刷新时间是1秒钟,这样会产生太多 ...

  4. OCM_第十二天课程:Section6 —》数据库性能调优_ 资源管理器/执行计划

    注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...

  5. Tomcat 和 JVM 的性能调优总结

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:http://rrd.me/enKbC Tomcat性能调优 ...

  6. JVM解读-性能调优实例

    2019独角兽企业重金招聘Python工程师标准>>> JVM性能调优 1 堆设置调优 年轻代大小选择 响应时间优先的应用:尽可能设大,直到接近系统的最低响应时间限制(根据实际情况选 ...

  7. Java性能调优、LinkedIn容器部署、阿里移动性能调优——首届APMCon精彩演讲先睹为快...

    APMCon2016,在盛夏的8月等你. \\ 作为第一届APM垂直领域的技术大会,我们能拿出什么呈现给参会者? \\ 答案是,除了会场可以纳凉避暑之外,还有来自国内外顶级技术大拿带来的Java性能管 ...

  8. elasticsearch原理_ElasticSearch读写底层原理及性能调优

    ES写入/查询底层原理 1. Elasticsearch写入数据流程 客户端随机选择一个ES集群中的节点,发送POST/PUT请求,被选择的节点为协调节点(coordinating node) 协调节 ...

  9. “性能调优”坑惨了几十万程序员

    很多程序员觉得性能调优这块的JVM.Mysql不是什么大事,自己平时写代码写得好好的,不是很了解JVM好像也没什么的,认为得千万级甚至亿万级的大流量.大项目才用得上,其他一般场景根本用不到,直到遇见这 ...

最新文章

  1. ATT与Intel汇编语言的比较
  2. 「GAN优化」如何学会以正确的姿势定量评价你的GAN
  3. 让 Linux 防火墙新秀 nftables 为你的 VPS 保驾护航
  4. 开发者社区精选直播合集一览
  5. Python:eval的妙用和滥用
  6. CISSP的成长之路(九):复习信息安全管理(3)
  7. java自动创建月份_使用Java根据月份动态绘制BarGraph
  8. Direct Training for Spiking Neural Networks: Faster, Larger, Better
  9. windows启动winload.exe的数字签名错误问题
  10. MAX262程控滤波器
  11. win10环境下如何安装CAD
  12. (搬砖)Epic/Feature/Story/Task/Bug到底是什么
  13. 【主题词——玫瑰花】
  14. 给UILabel中的文字加删除线
  15. 爱荷华州立 计算机博士,2020年爱荷华州立大学博士专业设置
  16. 流程图基础绘制方法和流程图制作软件功能详解
  17. 用JAVA写一个俄罗斯方块游戏tetrisGame
  18. SAP SM30隐藏部分字段以及自动带出某些值
  19. 《只为遇见你》硬生生把爱情片拍成了把妹宝典,真人出镜演绎直男转型
  20. R语言与数据分析之三:分类算法1

热门文章

  1. 互联网技术+非技术书单资源分享,都给泥萌!
  2. effective python目录_Effective python(七):协作开发
  3. java怎么给list集合排序_java list集合排序按某一属性排序操作
  4. java移动接口发短信_Java面试零碎知识点
  5. python库路径_如何设置本地python库目录/ PYTHONPATH?
  6. xshell 6 连接debian系统拒绝了密码_原来连接Linux,还有这个方法
  7. 两校合并!新部属大学,来了!
  8. 重磅!13所985高校,成立大学联盟!
  9. 华罗庚先生的数学教育思想
  10. 多所高校通知,新学期延期开学!做好线上教学准备