在生产环境下,从电子渠道的多个交易系统通过SSIS(SQL Server Integration Services)进行数据服务平台的ETL数据抽取时出现性能问题。在初期使用过程中出现了数据抽取速度过慢和系统资源占用过高的问题,除数据库基础架构建设存在优化可能外,SSIS参数未做面向生产环境硬件的优化也是一个重要原因,导致无法正常发挥SSIS真正性能。
SSIS采用VS2005集成的开发环境,对数据采集的过程可进行可视化的定制开发,对数据量小的维度表(字典表)可同时并行抽取多个,以加快抽取速度,而对于大的事实表(业务表)可采用串行化抽取,对于数据量较大的表,采用串行化方式提取。
在分析开发人员开发的SSIS 包时,主要发现几个与性能有关的参数值设置问题:
1.事实上在大数据量操作时,将大事务拆解成小事务是实践证明的最高效的处理方式,如把数据提交放在一个很大的事务中,就会出现事务保持和回滚需要更多的资源和时间,并造成物理内存不足,且更容易出错。
2.线程做为操作系统争用CPU资源的系统对象,本身会花费一定的CPU时间进行线程切换与同步,所以线程数不应比物理CPU数量多太多,考虑到操作系统本身和其他运行中的软件对CPU的占用,甚至要略少于物理CPU。
3.SSIS提供不检查check约束和触发器的快速加载方式(Fast load),可提高数据写入的速度,对于不需要严格审查的数据导入比较适用。
1.3 参数优化建议
以下的章节提供了一些较为常用的SSIS执行性能优化的参数和建议,以供调优参考。由于目前我们缺少大数据量的模拟环境,建议在生产环境中调整参数时,循序渐进,逐步调整。
2. 优化包参数
2.1 MaxConcurrentExecutables
MaxConcurrentExecutables是包的属性,它定义有多少个任务能被同时运行
如果值为-1的话就意味着同时可以运行的任务数为当前处理器的个数加上2
当超线程被打开的时候,它是逻辑处理器的个数
3. 控制流参数
3.1 MaxConcurrent
这是ForEachLoop组件的一个属性,意味着有多少个循环实例能并行运行
4. 数据流参数
4.1 EngineThreads 属性
这是数据流任务中的属性,它定义有多少个工作线程在引擎调度时可以被使用。缺省值为5,可设置范围为2-60之间,建议根据物理CUP个数调高到总CUP个数左右。如双核8C的服务器,可设置为15-17个左右,具体应依实际对比测试性能而定。
注:多核处理器应当算作多个处理器。
4.2 DefaultBufferMaxRows属性
SSIS数据流引擎可以通过计算一行数据的估计大小来调整其缓冲区大小的任务。 引擎将估计的单行大小与 DefaultBufferMaxRows 值相乘以获得缓冲区大小的初步工作值。可计算出单行数据大小,乘以每次提交数据的行数,得到适当的缓冲大小
1、如果该结果大于 DefaultBufferSize 值,引擎将减少行数。
2、如果该结果小于内部计算的最小缓冲区大小,引擎将增加行数。
3、如果结果在最小缓冲区大小和 DefaultBufferSize 值之间,引擎将调整缓冲区大小,以尽可能接近估计行大小乘以 DefaultBufferMaxRows 值得出的结果。
4、默认缓冲区大小为 10 MB,最大缓冲区大小为 100 MB。 默认最大行数为 10,000。
4.3 DefaultBufferSize属性
此参数应与DefaultBufferMaxRows配合使用。
4.4 BufferTempStoragePath属性
为缓冲区数据指定临时存储位置。默认情况下,这些属性包含 TEMP 和 TMP 环境变量的值。您可能希望指定不同或更快的硬盘驱动器上的其他文件夹来存放临时文件,或将它们分布在多个驱动器上。可以指定多个目录,并用分号来分隔这些目录名。
4.5 BLOBTempStoragePath属性
为包含二进制大型对象 (BLOB) 数据的列指定临时存储位置。默认情况下,这些属性包含 TEMP 和 TMP 环境变量的值。您可能希望指定不同或更快的硬盘驱动器上的其他文件夹来存放临时文件,或将它们分布在多个驱动器上。可以指定多个目录,并用分号来分隔这些目录名。
4.6 数据流目标参数设置建议
在选用OLEDB做为数据目标时,可将数据访问模式可设置为:表或视图-快速加载,每批行数可设为1000、5000、10000、20000、50000做分别的性能对比测试。
另外,也建议使用SQL Server目标做性能对比测试,一般情况下SQL Server目标性会比OLE DB目标更好。
5. 模拟测试
5.1 测试环境
服务器配置:IBM XSERIES_3755 Dual-Core AMD Opteron(tm) Processor 8212
CPU 2G X 4 Dual-Core 内存8G 存储 本地SCSI
Windows 2003 SP2 R2企业版
OLTP数据库:Sybase 12.5
OLAP数据库:SQL Server2005企业版SP2
网络:100M
批行数设置为1000时的几组测试数据对比:
DefaultBufferMaxRows
|
DefaultBufferSize
|
EngineThreads
|
已用时间
|
数据量
|
数据大小
|
10000
|
20971520
|
5
|
2125.53秒
|
2558374条
|
923560 KB
|
10000
|
10485760
|
5
|
1818.7 秒
|
2558374条
|
923560 KB
|
1000
|
10485760
|
6
|
220.891秒
|
2558374条
|
923560 KB
|
1000
|
10485760
|
7
|
220.438 秒
|
2558374条
|
923560 KB
|
1000
|
10485760
|
8
|
236.047秒
|
2558374条
|
923560 KB
|
最佳性能的测试指标为220秒(3分40秒),数据笔数255,8374条,数据约900M
测试对比结果表明,设置适合的缓冲大小,采用较小的事务提交,并使用适当的线程数可数十倍地提高SSIS包的ETL任务执行速度。
数据流的相关性能参数:BLOBTempStoragePath、BufferTempStoragePath、DefaultBufferMaxRows、DefaultBufferSize、EngineThreads。目前主要用到了DefaultBufferMaxRows、DefaultBufferSize、EngineThreads。
OLEDB目标中使用快速加载,参数主要设置了 每批行数和最大插入大小。
另外参数 控制流/执行 属性中的 MaxConcurrentExecutables ,对SSIS的性能也有些影响,这个属性是设置包中并发执行的可执行文件的数目。目前测试验证SSIS项目中没有针对这个属性做专门的设置,因为包中的可执行文件都是顺序执行的,可执行文件之间都约束限制。
系统性能的调优是一个需要实地化进行工作的过程,硬件环境、网络环境、软件环境(如是否64位系统,分配给SQL Server的内存等),很多理论上的技巧和开发环境性的优化措施,在生产环境下未必是最优的。如果一个系统确实对性能要求很高,性能调优的工作,应该包含在项目计划当中,在尽量接近生产环境配置和数据量级的环境下有计划地提早开始,而不是上线后再临时仓促展开。希望对大家的调优认识和工作能有所帮助。
分享到:
相关推荐
这些系统各自存储着不同类型的数据,如电子病历、病人基本信息、医嘱信息等,通过ETL工具能够实现跨系统的数据整合和传输,极大地提高了数据管理和使用的效率。 #### 常用ETL工具 当前市场上存在多种ETL工具,如...
### 微软BI SSIS 2012 ETL 控件与案例精讲 #### 一、概述 在数据处理领域,尤其是商业智能(Business Intelligence,简称BI)方面,ETL(Extract-Transform-Load)过程是至关重要的环节。ETL指的是从不同的数据源...
上一个报表服务的ppt因为不明白“10分”是什么意思,所以分值高了,在此表示歉意。不过2005的教材现在比较少,物以稀为贵嘛,我回陆续发出2005的教材,希望能给大家帮助。大家踊跃共享自己的资料互相交流学习。
### 数据仓库 ETL SSIS 知识点综述 #### 数据仓库 ETL SSIS 的理论基础 **数据仓库**是一种用于存储和管理企业历史数据的系统,这些数据来自不同的源系统,经过清洗、转换和加载(ETL)过程后,为商业智能(BI)和...
SSIS(SQL Server Integration Services)是微软提供的一款强大的数据集成工具,主要用于数据抽取(Extract)、转换(Transform)和加载(Load)过程,也就是我们常说的ETL。在"用SSIS做的销售事例的ETL"项目中,你...
它不仅限于ETL,还集成了数据清洗、数据挖掘、报表和在线分析系统,是BI(Business Intelligence)平台的关键组成部分。 **产品定位及工作原理** SSIS定位为一个企业级的数据集成解决方案,具有高起点、高性能和易...
"Cognos_JavaScriptPrompts .doc"可能涉及到IBM的Cognos BI工具,它允许使用JavaScript进行交互式报告,可以与SSIS集成以展示ETL结果。"Oracle数据仓库用户案例.ppt"可能展示了如何在Oracle环境中应用BI和ETL,而...
本文将深入探讨SSIS的最佳实践,帮助开发者优化其系统,确保SSIS在各种环境下都能高效运行。 1. **内存优化**:SSIS是一个基于内存的数据管道,所有转换应尽可能在内存中完成。这有助于避免磁盘I/O导致的性能下降。...
微软BI SSIS 2012 ETL 控件与案例精讲视频教程分享;本课程共计49个原创案例,1460余分钟,共24个小时。 课程设计涵盖了微软 BI SSIS 几乎所有常用控件,通过大量案例对各个知识点技能进行详细讲解。每一个案例...
ETL(Extract, Transform, Load)是数据仓库领域中的核心概念,主要负责从各种源系统中提取数据,对其进行转换以适应目标系统需求,最后加载到数据仓库或数据湖中。在本案例研究中,我们将专注于使用SQL Server ...
SSIS,全称SQL Server Integration Services,是微软提供的一个用于构建高效数据集成解决方案的平台,尤其在处理数据仓库的提取、转换和加载(ETL)过程中表现突出。它集成了各种内置任务、容器、转换和数据适配器,...
### ETL SSIS文档知识点详解 #### 一、时间戳(Timestamp)概念及其在数据库中的应用 ##### 1.1 时间戳的基本概念 - **定义**:时间戳并不是传统意义上的时间字段,它实际上是一个由数据库自动生成的唯一二进制...
**SQL Server Integration Services (SSIS)** 是Microsoft SQL Server平台中的一个组件,主要用于数据提取、转换和加载(ETL)任务,支持复杂的批量操作和数据迁移场景。SSIS自SQL Server 2005版本引入以来,逐渐成为...
2. **ETL过程**:学习如何使用SSIS实现ETL过程,包括从不同数据源提取数据,进行清洗、转换,然后加载到目标系统。例如,你可以找到如何设置数据源连接、如何配置数据流任务和转换的实例。 3. **数据转换**:SSIS...
SSIS(SQL Server Integration Services)是微软提供的一种ETL工具,用于构建数据集成和转换解决方案。本案例研究将重点介绍使用SSIS进行ETL开发的过程,特别是在一个特定的环境中:使用SQL Server作为数据源,...
SSIS,全称为SQL Server Integration Services,是微软提供的一个数据集成和ETL(提取、转换、加载)平台,用于在SQL Server中处理和管理数据。SSIS在SQL Server 2005版本中引入,极大地提升了数据库维护的功能和...
4. 数据集成:SSIS 可以与 SQL Server 报表服务(Reporting Services)无缝集成,即 SSIS 包可以作为报表服务的数据源。 使用 SSIS 导入导出数据 下面是一个使用 SSIS 导入导出数据的例子: 1. 打开 SQL Server ...
EasyBI SSIS ETL 框架,EasyBI 提供各种日志和审计功能。 用于 SQL Server 的完整 SSIS ETL 框架。 ##贡献 叉它! 创建您的功能分支: git checkout -b my-new-feature 提交您的更改: git commit -am '添加一些...