摘要: 部分用户(尤其对外输出)使用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的功能,用开窗函数可以高效执行得到预期结果。
原文链接:http://click.aliyun.com/m/45009/
分享到:
相关推荐
9月25日MaxCompute直播课件下载。 了解更多MaxCompute产品和技术相关内容,可扫描二维码加入“MaxCompute开发者交流”钉钉群。
MaxCompute SQL不仅在性能、安全性和成本控制方面受到业界认可,而且已经在很多领域支撑起了用户的业务核心。尽管如此,它与传统大数据运算平台如Hive、Oracle、SQL Server等存在显著差异,并且在标准SQL支持方面还...
总而言之,MaxCompute SQL的技术展望展示了其对用户友好性、功能扩展和性能优化的承诺。通过这些改进,MaxCompute SQL旨在成为一个更强大、更灵活、更适应未来数据处理需求的平台,为大数据分析提供更高效、便捷的...
MaxCompute SQL 2 数字取证 数字风险 安全人才 工控安全 web安全
MaxCompute SQL 2.0计算引擎 MaxCompute SQL 2.0是阿里云数据事业部专家少杰开发的全新的计算引擎,旨在提供高效、可靠、灵活的数据处理能力。该引擎基于分布式数据仓库和批处理技术,支持列存储,具有高性能和高...
解决MaxCompute SQL count distinct多个字段的方法按照惯性思维,统计一个字段去重后的条数我们的sql写起来如下:Distinct的作用
MaxCompute SQL是MaxCompute提供的数据查询和操作语言,它基于SQL,但并非完全兼容。MaxCompute SQL是SQL的一个子集,不支持一些常见的数据库特性,如事务处理、主键约束和索引。用户需要注意,MaxCompute SQL的语句...
大数据计算服务MaxCompute SQL概要介绍_MAXCompute SQL是一种面向海量数据(TB级别)的计算服务,适用于实时性要求不高的场合。 MaxCompute SQL的每个作业的准备、提交等阶段需要花费较长时间,因此不适合需要每秒...
阿里大数据计算服务MaxCompute是一款专为大规模数据处理设计的分布式计算平台,其SQL版本提供了一种类似SQL的语法,用于处理TB级别的海量数据。MaxCompute SQL适用于数据分析、报表生成等实时性要求不高的场景,因为...
总的来说,MaxCompute SQL 是一种针对大数据处理优化的SQL方言,它在处理海量数据时展现出强大的性能,但同时也需要开发者理解和遵循其特定的语法和限制。在实际使用中,理解类型转换的规则和限制,以及合理利用保留...
3. MaxCompute 高性能 SQL引擎:介绍了MaxCompute 高性能 SQL引擎的技术和实现细节。 4. MaxCompute Serverless 关键技术:介绍了MaxCompute Serverless的关键技术,包括弹性伸缩、按量付费、免运维等。 MaxCompute...
例如,使用编译器优化器来提升SQL查询性能,通过代价模型和历史运行信息进行更优的执行配置选择,即HBO(History-Based Optimization)。此外,针对数据存储,采用了全异步IO和Bubble Based Scheduling,以及分层...
总结,万台集群的MaxCompute性能优化是一个系统性工程,涉及到SQL优化、数据分布、并行计算、资源管理等多个层面。通过细致的策略调整和持续的监控,可以显著提升MaxCompute处理大数据的能力,为企业的数据分析提供...
MaxCompute insert语句使用 本文介绍使用INSERT OVERWRITE和INSERT INTO两种命令更新表数据,主要内容包括: insert into table … values …语句 insert into/overwrite … select …语句 Insert多路输出(MULTI ...
编程接口方面,MaxCompute2.0具有MaxCompute SQL 2.0,它兼容Hive的类型系统和内建函数,包括支持用户定义函数和ExternalTable。除此之外,还提供了CTE(公用表表达式)、INSERT、JOIN、UNION等SQL语句的支持,以...
// 具有子查询的sql String hql = "select id,name from (select id from table_1 where id={p0}) t1 inner join (select name --this is name\n from table_2) t2"; // 获取id字段的血缘 LineageNode idNode = ...
8. MaxCompute SQL:MaxCompute SQL 是一种功能强大的数据处理语言,能够快速处理大量数据。用户可以使用MaxCompute SQL快速构建大数据平台,实现数据价值的发掘。 9. MaxCompute Spark:MaxCompute Spark 是一种...
MaxCompute SQL支持更复杂的查询操作,且性能更优。 #### 六、性能差异 ##### 6.1 TPC-DS测试标准简介 TPC-DS (Transaction Processing Performance Council Benchmark D) 是一种专门用来衡量大规模数据仓库性能...
例如,RODPS允许R用户直接在MaxCompute上执行SQL并把结果转换为R的数据框,而PyODPS则为Pandas用户提供了基于MaxCompute SQL的分布式DataFrame,同时集成了PAI算法,简化了复杂算法的调用。 在开发环境的集成上,...