ETL工作流缓慢原因查找方法
What steps do you take to determine the bottleneck of a slow running ETL process?
如果ETL进程运行较慢,需要分哪几步去找到ETL系统的瓶颈问题。
答:ETL系统遇到性能问题,运行很慢是一件较常见的事情,这时要做的是逐步找到系统的瓶颈在哪里。
首先要确定是由CPU、内存、I/O和网络等产生的瓶颈,还是由ETL处理过程产生的瓶颈。
如果环境没有瓶颈,那么需要分析ETL的代码。这时,我们可以采用排除的方法,需要隔离不同的操作,并分别对它们进行测试。如果是采用纯手工编码方式的ETL处理,隔离不同的操作要麻烦一些,这时需要根据编码的实际情况来处理。如果是采用ETL工具的话,目前的ETL工具应该都有隔离不同处理的功能,隔离起来相对容易一些。
分析最好从抽取操作开始,然后依次分析各种计算、查找表、聚集、过滤等转换环节的处理操作,最后分析加载操作。
实际的处理中,可以按照下面的七个步骤来查找瓶颈。
1.隔离并执行抽取查询语句。
先将抽取部分隔离出来,去掉转换和交付,可以将数据直接抽取到文件中。如果这一步效率很差,基本确定是抽取SQL的问题。从经验来看,未经调优的SQL是一个最常见的导致ETL效率差的原因。如果这步没有问题进入第二步。
2.去掉过滤条件。
这一条是针对全抽取,然后在ETL处理中进行过滤的处理方式而言。在ETL处理中做过滤处理有时会产生瓶颈。可以先将过滤去掉,如果确定为这个原因,可以考虑在抽取时进行数据过滤。
3.排除查找表的问题。
参照数据在ETL处理过程中通常会加载到内存中,目的是做代码和名称的查找替换,也称查找表。有时查找表的数据量过大也会产生瓶颈。可以逐个隔离查找表,来确定是否是这里出现问题。注意要将查找表的数据量降到最低,通常一个自然键一个代理键就可以,这样可以减少不必要的数据I/O。
4.分析排序和聚集操作。
排序和聚集操作都是非常费资源的操作。对这部分隔离,来判断是否因为它们引起性能问题。如果确定是因为这个,需要考虑是否可以将排序和聚集处理移出数据库和ETL工具,移到操作系统中来处理。
5.隔离并分析每一个计算和转换处理。
有时转换过程中的处理操作也会引起ETL工作的性能。逐步隔离移除它们来判断哪里出了问题。要注意观察像默认值、数据类型转换等操作。
6.隔离更新策略。
更新操作在数据量非常大时是性能非常差的。隔离这部分,看看是否这里出了问题。如果确定是因为大批量更新出了性能问题。应该考虑将insert、update和delete分开处理。
7.检测加载数据的数据库I/O。
如果前面各部分都没有问题,最后需要检测是目标数据库的性能问题。可以找个文件代替数据库,如果性能提高很多,需要仔细检测目标数据库的加载过程中的操作。例如是否关闭了所有的约束,关闭了所有的索引,是否使用了批量加载工具。如果性能还没有提高,可以考虑使用并行加载策略。
ETL工作流缓慢原因查找方法的更多相关文章
- WebDriver元素查找方法摘录与总结
WebDriver元素查找方法摘录与总结 整理By:果冻迪迪 selenium-webdriver提供了强大的元素定位方法,支持以下三种方法. • 单个对象的定位方法 • 多个对象的定位方法 • 层级 ...
- vue 首次加载缓慢/刷新后加载缓慢 原因及解决方案
# vue 首次加载缓慢/刷新后加载缓慢 原因及解决方案 最近做项目发现一个问题,页面每次刷新后加载速度都非常慢,20s左右,在开发环境则非常流畅,几乎感觉不到,本文参考望山的各种方案优化 1,关闭打 ...
- jQuery 的选择器常用的元素查找方法
jQuery 的选择器常用的元素查找方法 基本选择器: $("#myELement") 选择id值等于myElement的元素,id值不能重复在文档中只能有一个id值是myE ...
- 浅析jQuery中常用的元素查找方法总结
本篇文章是对jQuery中常用的元素查找方法进行了详细的总结和介绍,需要的朋友参考下 $("#myELement") 选择id值等于myElement的元素,id值不能重复在文 ...
- sap 三代出口(BADI)的查找方法
sap 三代出口(BADI)的查找方法 对于根据事务代码查找对应的BADI,网上介绍的方法很多,但总结下来无非就两种方法,在此把它记录下来,方便以后自己查阅了.(1)通过SE24,输入CL_EXITH ...
- 【转】SharePoint工作流中常用的方法
SharePoint中使用工作流对象模型. SharePoint工作流对象模型在Microsoft.SharePoint.Workflow命名空间.你可以利用此对象模型对你的工作流进行编程.你可以启动 ...
- linux上TCP connection timeout的原因查找
linux上TCP connection timeout的原因查找 好久没有写文章了, 今天解决了一个网络连接超时的问题, 记录以备查看. 最近在线上nginx经常出现输出connection tim ...
- jquery元素查找方法集锦
jQuery常用的元素查找方法总结 $("#myELement") 选择id值等于myElement的元素,id值不能重复在文档中只能有一个id值是myElement所以得到 ...
- <1>Linux日志查找方法
Linux日志查找方法 适用于测试,开发,运维人员,用来查找Linux服务器问题的一般方法,比较实用,如果有更好的办法可以一块讨论,欢迎大神们来指导哈!!! 进入正题 第一步.通过Xshell登录服务 ...
随机推荐
- emacs之切换h/cpp配置
emacsConfig/switch-file-setting.el (defun switch-c () (global-set-key (kbd "<C-return>&qu ...
- RPC框架之Thrift分析(转)
一.简介 1.Thrift是Facebook开发的跨语言的RPC服务框架.随后贡献给Apache开源组织.成为RPC服务的主流框架. 2.特点: 优点: 跨语言,支持java.c/c ...
- 基于SOA的编程模型
1.webservice是SOA架构的一种实现 ============================================================================ ...
- Python中小整数对象池和大整数对象池
1. 小整数对象池 整数在程序中的使用非常广泛,Python为了优化速度,使用了小整数对象池, 避免为整数频繁申请和销毁内存空间. Python 对小整数的定义是 [-5, 256] 这些整数对象是提 ...
- 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #12 使用Memory Cgroup限制内存使用量
HACK #12 使用Memory Cgroup限制内存使用量 Memory Cgroup是Cgroup的资源限制功能之一,可以控制特定进程可以使用的内存量.Memory CgroupMemory C ...
- Django ORM-01
What is ORM Django ? ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. ...
- 225. Implement Stack using Queues + 232. Implement Queue using Stacks
▶ 栈和队列的相互表示.发现内置的队列和栈结构都十分高效,相互表示后性能损失都很小. ▶ 第 225 题,用队列实现栈 ● 自己的代码,3 ms,单队列实现,入栈 O(1),读取栈顶元素 O(n),出 ...
- Spring Cloud Eureka的基础架构
基础架构 服务注册中心:Eureka提供的服务端,提供服务注册于发现的功能,也就是在上一节中我们实现的eureka-server 服务提供者:提供服务的应用,可以是springBoot应用,也可以是其 ...
- CSS文档流、块级元素、内联元素
CSS文档流与块级元素(block).内联元素(inline),之前翻阅不少书籍,看过不少文章, 看到所多的是零碎的CSS布局基本知识,比较表面.看过O'Reilly的<CSS权威指南>, ...
- spring mvc 映射器和适配器
映射器和适配器 1.非注解的映射器和适配器 a. 入门程序中的单个映射 BeanNameUrlHandlerMapping SimpleControllerHandlerAdapter b.另一种ma ...