如在上篇文章《ETL调优的一些分享(上)》中已介绍的,ETL是构建数据仓库的必经一环,它的执行性能对于数据仓库构建性能有重要意义,因此对它进行有效的调优将十分重要。ETL业务的调优可以从若干思路开展,上文我们已经介绍了其中三点,本文我们将再分享如下几点建议。

  • 减少不必要的事务表的使用

  • 减少事务性操作的窗口时间

  • 从最影响总体性能的case开始分析

  • 步骤迭代,直至最优

减少不必要的事务表的使用

由于ORC事务表读取和操作较慢,为确保执行效率,对于业务中不涉及事务操作的表,建议使用普通ORC表,而非ORC事务表。另外,必要时建议手动进行Major compact,可以减少因Delta文件过多导致的查询速度慢的问题。

Case Study:

该案例中的业务人员将此语句中临时表test_transaction_tmp建成了事务表。但是分析业务发现,test_transaction_tmp表仅仅进行了insert into和查询操作,并未进行update/delete/merge等事务性操作,完全可以用普通ORC表替代。替代后的读取速度会比事务ORC表快,并会减少因事务性操作带来的干扰。

减少事务性操作的窗口时间

Inceptor的事务性实现是基于表级锁,而非行级锁。所以在高并发业务场景下,减少事务性操作的互斥区域的执行时间就很重要。优化业务性能时应该优先考虑这部分的时间。

Case Study:SQL同上节。

由上述SQL可见,对于事务表test_transaction_target的事务操作,从语句“delete from default.test_transaction_target where 1=1;”开始,拿到表test_transaction_target的锁,直至commit语句执行完才会释放。所以高并发场景下就会遇到类似这种互斥区域带来的串行问题。为了减少因事务性功能的互斥实现导致的串行问题影响,需要重点优化从delete from语句开始,到commit语句结束,此窗口的SQL执行总时间,减少因串行带来的影响。

从最影响总体性能的Case开始分析

处理了前五步(包括上文的三步)的影响因素后,接下来对执行依然很慢的业务,需要从耗时的业务开始进行case by case的迭代分析。

首先通过Explain检查执行计划的合理性。如查看过滤下推是否成功,Join顺序是否合理等。对于过滤下推的检查,若处于未被Inceptor优化覆盖的场景,可通过适当手工修改SQL解决。Join顺序的问题,在之前收集的数据特征的基础上,判断Join顺序是否合理,如大表和大表先Join即为不合理的情况。对于此类情况,可以考虑enable CBO来统一解决Join顺序问题。另外,如果在多表Join的案例中发现Join过程较慢,并发度不高,需要考虑是否应该disable MapJoin。一般来说,大表很大时,为节省Shuffle effort,优先默认使用MapJoin。对于中小表同多个小表Join,为提升并发度,减少MapJoin的串行执行影响,可以考虑关掉autoconvert开关。

其次,确定执行计划无误之后,可以进一步通过jstack观察执行热点,进一步定位性能瓶颈。

迭代步骤,直至最优

不断迭代上步,参考语句的性能分析(例如观察Inceptor的4040界面),发现性能瓶颈并解决。直至总体性能满足要求。

总结

我们通过上次和本次两篇文章分享了一些关于ETL调优的经验想法,这些都是从生产实施实践中所总结出的,希望在提升数仓构建的整体效率的过程中,各个读者能从这些思路获得帮助。

感谢原文作者的分享,传送门:http://www.transwarp.io/news/detail?id=175

ETL调优的一些分享(下)(转载)的更多相关文章

  1. ETL调优的一些分享(上)(转载)

    ETL是构建数据仓库的重要一环.通过该过程用户将所需数据提取出来,并按照已定义的模型导入数据仓库.由于ETL是建立数据仓库的必经过程,它的效率将影响整个数据仓库的构建,因此它的有效调优具有很高的重要性 ...

  2. 老大难的GC原理及调优,这下全说清楚了

    概述 本文介绍GC基础原理和理论,GC调优方法思路和方法,基于Hotspot jdk1.8,学习之后将了解如何对生产系统出现的GC问题进行排查解决 阅读时长约30分钟,内容主要如下: GC基础原理,涉 ...

  3. Spark调优秘诀——超详细

    版权声明:本文为博主原创文章,转载请注明出处. Spark调优秘诀 1.诊断内存的消耗 在Spark应用程序中,内存都消耗在哪了? 1.每个Java对象都有一个包含该对象元数据的对象头,其大小是16个 ...

  4. 《Tomcat和JVM的性能调优你真的学会了吗?》总结篇

    Tomcat性能调优: 找到Tomcat根目录下的conf目录,修改server.xml文件的内容.对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创 ...

  5. jvm系列(六):Java服务GC参数调优案例

    本文介绍了一次生产环境的JVM GC相关参数的调优过程,通过参数的调整避免了GC卡顿对JAVA服务成功率的影响. 这段时间在整理jvm系列的文章,无意中发现本文,作者思路清晰通过步步分析最终解决问题. ...

  6. Oracle调优之看懂Oracle执行计划

    @ 目录 1.文章写作前言简介 2.什么是执行计划? 3.怎么查看执行计划? 4.查看真实执行计划 5.看懂Oracle执行计划 5.1 查看explain 5.2 explain执行顺序 5.3 访 ...

  7. JVM调优之---一次GC调优实战

    某系统反馈『性能抖动,响应时间会突然飙高,TP999 MAX会到3000+』,初步怀疑是JVM FULL GC导致的 STW,观察FULL GC日志默认的JVM参数: -Xms4096m -Xmx40 ...

  8. 一文读懂Java GC原理和调优

    概述 本文介绍GC基础原理和理论,GC调优方法思路和方法,基于Hotspot jdk1.8,学习之后将了解如何对生产系统出现的GC问题进行排查解决 阅读时长约30分钟,内容主要如下: GC基础原理,涉 ...

  9. 一份 Tomcat 和 JVM 的性能调优经验总结!拿走不谢

    Tomcat性能调优 找到Tomcat根目录下的conf目录,修改server.xml文件的内容.对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创建 ...

随机推荐

  1. nodejs+express+mongodb 快速接口开发

    nodejs+mongodb+express API快速生成 使用说明 安装 $ npm install duzq-quick-mongo 建立mongodb数据模型 const mongoose = ...

  2. 【Tomcat】手写迷你版Tomcat

    目录 源码地址 一,分析 Mini版Tomcat需要实现的功能 二,开发--准备工作 2.1 新建Maven工程 2.2 定义编译级别 2.3 新建主类编写启动入口和端口 三,开发--1.0版本 3. ...

  3. Mysql Workbench查询成功但是不显示

    先来看看MysqlWorkbench的一个bug: 当执行SQL语句成后显示结果在屏幕下方,但是当你拖动结果拦边框往下移动到与Action Output时两者就会合并,再也拖不上来!!!! 回归正题: ...

  4. .NETCore使用EntityFrameworkCore连接数据库生成实体

    EF Core 通过数据库提供程序插件模型与 SQL Server/SQL Azure.SQLite.Azure Cosmos DB.MySQL.PostgreSQL 和更多数据库配合使用. 使用EF ...

  5. 如何重新加载 Spring Boot 上的更改,而无需重新启动服务器?

    这可以使用 DEV 工具来实现.通过这种依赖关系,您可以节省任何更改,嵌入式 tomcat将重新启动.Spring Boot 有一个开发工具(DevTools)模块,它有助于提高开发人员的生产力.Ja ...

  6. CSS解析

    CSS(层叠样式表) CSS层叠样式表(Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言. ...

  7. Redis底层数据结构实现

    REDIS  较宽泛的支持5种数据结构  分别为 字符串 列表 集合 散列 有序集合 关于这几种数据结构的使用 相信网上有很多资料,查看官网API 也很详细了  读者可以自己随意翻阅 很方便 . 接下 ...

  8. noip2016自测报告

    随便测了一下2016的提高组,发现自己还是太菜了... day1 T1:玩具谜题 一个模拟题,打挂了,只有95分,错的很傻逼 code: #include<bits/stdc++.h> u ...

  9. Java 8 之前的时间处理

    最近在自己瞎折腾,有一个需求是计算当前日期到指定日期有多少天,用于实现纪念日或倒计时的功能.查阅资料后发现Java 8之前的时间日期处理很是麻烦而且被频频吐槽,以至于后来在 Java 8 中推出了一个 ...

  10. flask socketio 踩坑记录

    在使用python3的flask-socketio+socket.io.js的时候报错 在使用python3的flask-socketio+socket.io.js的时候报错"unsuppo ...