etl调优的一些分享(下)(转载)

ThinkDifferent ThinkDifferent     2022-10-26     140

关键词:

如在上篇文章《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

关于linux性能调优中磁盘io调优的一些笔记(代码片段)

写在前面和小伙伴分享一些Linux磁盘IO优化的笔记,内容很浅,可以用作入门博文内容结合《Linux性能优化》读书笔记整理涉及内容包括使用vmstat统计系统内磁盘分区I/O属性的性能使用iostat分析磁盘分区的饱和度,利用率... 查看详情

关于linux中系统调优的一些笔记(代码片段)

...,这里做为了解,长长见识。博文内容包括系统调优原理概述如何检测系统的性能瓶颈如何进行内核参数调优如何限制服务的资源占用自定义tuned调优配置集我突然又明白,死亡是聪明的兄长,我们可以放心地把... 查看详情

需要 POSTGRES 调优的建议

】需要POSTGRES调优的建议【英文标题】:NeedsuggestionforPOSTGRESTuning【发布时间】:2020-07-2116:32:49【问题描述】:我需要在我的数据库上经常运行几个复杂的查询,我的一个查询需要大约57秒才能执行,我正在尝试一种调整我的Postgre... 查看详情

jvm层gc调优(下)(代码片段)

GC日志格式本文是JVM层GC调优(上)的后续,在上一篇文章中,我们介绍了JVM的内存结构、常见的垃圾回收算法以及垃圾收集器和不同收集器中的一些GC调优参数。所以通过上文,我们也对GC相关的内容有了一定的了解。但是光知... 查看详情

转载etl浅谈

ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据。 ETL是BI项目重要的一个环节。通常情况下,在BI项目中ETL... 查看详情

linux上tcp的几个内核参数调优(代码片段)

...一个强大的操作系统,提供了一系列内核参数供我们进行调优。光TCP的调优参数就有50多个。在和线上问题斗智斗勇的过程中,笔者积累了一些在内网环境应该进行调优的参数。在此分享出来,希望对大家有所帮助。调优清单好... 查看详情

性能调优调优的常见思路和方法(代码片段)

...标,初步定位瓶颈点后,如何进一步进行确认和调优?在这里提供一些可实践、可借鉴、可参考的性能调优套路,即:如何在众多异常性能指标中,找出最核心的那一个,进而定位性能瓶颈点,最... 查看详情

关于linux性能调优之内存负载调优(代码片段)

写在前面整理一些Linux内存调优的笔记,分享给小伙伴博文没有涉及的Demo,理论方法偏多,可以用作内存调优入门博文内容涉及:Linux内存管理的基本理论寻找内存泄露的进程内存交换空间调优不同方式的内存回收食用方式... 查看详情

jvm学习笔记------内存调优

...,未经博主允许不得转载。首先需要注意的是在对JVM内存调优的时候不能只看操作系统级别Java进程所占用的内存,这个数值不能准确的反应堆内存的真实占用情况,因为GC过后这个值是不会变化的,因此内存调优的时候要更多地... 查看详情

day707.jetty性能调优的思路-深入拆解tomcat&jetty(代码片段)

Jetty性能调优的思路Hi,我是阿昌,今天学习记录的是关于Jetty性能调优的思路一、操作系统层面调优对于Linux操作系统调优来说,我们需要加大一些默认的限制值,这些参数主要可以在/etc/security/limits.conf中或通过s... 查看详情

网络调优

 关于网络调优,尤其是TCPTuning(你可以以这两个关键词在网上找到很多文章),这里面有很多很多东西可以说。看看Linux下TCP/IP的那么多参数就知道了(顺便说一下,你也许不喜欢Linux,但是你不能否认Linux给我们了很多可以... 查看详情

hive性能调优实战分享

...宝哥大数据】,更多干货目录第1章举例感受Hive性能调优的多样性1.1感受改写SQL对性能的影响1.1.1数据准备1.1.2union案例1.1.3改写SQL实现union的优化1.1.4失败的union调优1.2感受 查看详情

spark调优经验(待续)

spark调优是须要依据业务须要调整的,并非说某个设置是一成不变的,就比方机器学习一样,是在不断的调试中找出当前业务下更优的调优配置。以下零碎的总结了一些我的调优笔记。spark存储的时候存在严重的分配不均的现象... 查看详情

性能调优步骤

性能调优步骤一般性能问题调优的步骤:步骤一:确定问题应用程序代码:在通常情况下,很多程序的性能问题都是写出来的,因此对于发现瓶颈的模块,应该首先检查一下代码。数据库配置:经常引起整个系统运行缓慢,一些... 查看详情

jvmgc原理及调优的基本思路(代码片段)

若观察到Tomcat进程CPU使用率较高,并在GC日志中发现GC次数比较频繁、GC停顿时间长,说明需优化GC。CMS和G1是时下使用率比较高的两款垃圾收集器,从Java9开始,G1是默认垃圾收集器。CMSvsG1CMS收集器将Java堆分为新生... 查看详情

系统调优的4大子系统

系统调优的4大子系统:1、查看系统中使用cpu最多的进程top->pps-aux--sort-pcpu|more2、找出系统中使用内存最多的进程top->mps-aux--sort-rss|more3、找到系统对磁盘读写最多的进程iostat和iotopiostat-d-k-p/dev/sdaiotop-o-d24、找到系统中使用网... 查看详情

java代码监控jvm运行状态——记一次jvm调优的毛招

在做模型项目的时候遇到一个问题,由于模型服务装载一些大模型,大模型对象的大小在300M左右,而一台服务器可能装载多个大模型。在服务启动和模型更新的时候会遇到younggc耗时过长的问题,younggc所采用的垃圾回收器是ParNew... 查看详情

javajvm调优的正确姿势-转

...:https://www.liaoxuefeng.com/article/1336345083510818那么JVM正确的调优方式是啥?我个人推荐四步走:   记录好日志;   对程序做好性能监控;   根据日志和性能监控数据修改程序;   使用专... 查看详情