IT技术网www.itjs.cn

当前位置:首页 > 数据库 > SQl Server > Integration Services:高性能策略(1)

Integration Services:高性能策略(1)

发布时间:2015-11-23 00:00 来源:未知

Elizabeth Vitt在商业智能领域拥有超过十年的商业系统开发,项目管理,咨询和培训经验。她在数据仓库,ETL和OLAP设计和实施方面还有着丰富的教学经验。

目录

简介 

优化操作

对于这一序列中的每一步操作,你都可以使用性能分析,来指导你寻找优化和提升整个过程的机会。例如,在操作2种,当SSIS从文本文件中把数据读入数据管道时,所有的字段都被读成字符串类型,甚至当里面包含整数时也是。假如你的目的是使用已命名,确定类型的列将这一文件读入到的SQL Server目标数据表中,数据转换必须在数据读取的某个过程中就进行了。

为了减少数据集的大小,提升整体数据读取的性能,你可以在这一操作过程的早期就设置数据类型。在表1给出的例子中,对数据设置类型的最佳时间是操作2的过程中,当文件被读入到SSIS数据管道时。假如你不在这时设置数据类型,数据就将以其原始的字符串状态转过所有的步骤,直到它被读入SQL Server前才被完成了转换。

今后再调整文件解析,你也可以获得操作2中SSIS快速解析模型的好处。这一模型对包含一般数据格式的简单数据读取使用快速的解析路由,而并不需要特定的现场解析,这一格式不包含特殊的字符,也不包含十六进制字符。

数据类型优化并不仅仅适用于文件数据源。在SSIS数据读取过程的早期适当的设置数据类型,能够对所有的数据源都带来性能方面的好处。

这只是一个你可以优化数据读取操作的例子。你可以将这一方法在整个过程中的每一步都实施,你就可以为每个性能考量确定出更好的设计方法。

容量

容量是第二个关键,重要的性能影响因素。高级别的容量会对系统的资源,如内存和CPU产生更大的影响。你越是理解容量是怎样对你的数据操作产生影响的,你就越可以调整这些资源的应用,从而产生更有效率的操作。

定义容量

SSIS数据管道引擎使用一个缓存导向的结构,可以在内存中高效的读取和操作数据集。这一内存中处理过程的价值在于,对于数据读取的每个步骤来说,数据都没有必要被物理的拷贝和存储。取而代之,数据管道引擎在将数据从源向目标转移的过程中,使用缓存来管理数据。

为了优化这个管道,你的目标是,在尽可能少的缓存消耗中,传送尽可能多的记录,特别是在你处理大量数据容量的时候。为了达到这一目标,你必须首先对数据的长度(行数)和宽度(列数)进行分析。数据宽度基本上是各列数据类型的长度和,加上SSIS分配的固定长度的内存前缀。数据类型越小,对内存的使用就越有效。

优化容量

当你优化数据容量时,你首先应该评估所有的列,这是数据整合操作的一部分。很多时候尽管只需要这些列中的一部分,却还是将整个源文件的数据都读取了。不需要的列占据了系统的资源,应当尽可能的排除掉。

另外一个要考虑的因素是,不管你的方案是否需要增量或完全的数据读取,从容量的角度出发,完全的数据读取是高消耗的。假如你可以用增量的数据读取替代完全的数据读取,你将极大的减少数据读取操作的容量。这点在一个应用周期中容量不断增大的情况下特别适用。

在SSIS内,你可以通过三个主要的方法来优化容量:收缩数据集的大小,最大化吞吐量,以及定义并行操作。

a.收缩数据集的大小 - 为了演示收缩数据集,设想下面的例子。假定这包含5000000条记录的源文件有100列,都是在1到999之间的数字。假如你对这些列都保留默认的字符串数据类型,每个条记录的每个列需要50Bytes。这意味着每一行计算后需要大约5000Bytes,再加上SSIS需要的内存前缀。所以,对于一个5000000条记录的容量,每行5000bytes,文件的总大小约是23GB。假如你将这些列更精确的定义为2-byte大小的整型,再来考虑数据集大小间的区别。这将使每行的大小变为200bytes,总的大小就缩减为954MB,比字符串数据类型节省了大约22GB。通过数据类型大小的简单改变,你就可以大大减少要读入内存的数据量。注意,以上例子也说明了数据类型之间的相对差别和收缩数据集大小节省的空间,这并不是一个定死的大小调整方针。

b.最大化吞吐能力 – 除了设置数据类型,你还能够通过配置SSIS缓存设置——如DefaultMaxBufferSize和DefaultMaxBufferRows,来最大化吞吐能力。这些设置控制了在数据读取操作过程中创建缓存的大小,以及每次传递的记录行数。但是,对于调整这些参数的细节不在本白皮书内探讨。

c.定义并行操作 – 优化容量的第三个方法是考虑如何对操作进行并行化处理,以获得最大的效率。SSIS支持包,任务以及转换的并行化处理。当你设计并行处理流程时,你要考虑对数据读取操作实施怎样的并行度。例如,假如你需要读取并聚集多个文件的数据到SQL Server中,你可以考虑对以下一个或多个操作并行处理:文件读取,数据聚集,目标数据表装载。尽管SSIS支持所有这些操作的并行处理,你仍旧需要搞清楚系统的资源和它们并行支持的级别。你可能创建了一个高并行度的SSIS包,而随后就意识到你的系统没有足够的CPU和内存来充分体现这些并行的优势。

也许这个读取5000000条源记录的例子很简单,这些相同的原则却可以被直接应用到更大型和更复杂的数据读取任务中,这个任务可以包含多个数据源,需要复杂的数据转换,而且必须被装载到多个目的表中。

应用

根据定义好的一组数据整合操作以及对所需数据容量进行的评估,可以明确出应用因素,来帮助你决定那种数据整合应用最符合那些需求。

理解应用的使用

你可能会经常选择不同的应用程序去解决数据整合问题。关键是要确定哪些应用可以在给你带来足够功能的同时,成本较低。

例如,你面临着使用SQL Server Transact-SQL的BULK INSERT语句或BCP工具来往SQL Server中读取文本文件的工作,与SSIS相比,这样可以在成本较低的情况下满足数据读取功能的需求。当你有较小的数据集和简单的数据整合需求时,上述情况很可能发生,这时启动SSIS操作的开销就能抵消使用BCP或BULK INSERT所获得的性能收益。

帮助你做出正确的选择,我们把每一应用的主要功能组件列出来,以便你能够根据主要的需求做出相应的评价。例如,以下的使用指导可以帮助你在BULK INSERT/BCP或SSIS中做出选择。

BULK INSERT / BCP使用指导 – 当你的应用场景有以下的特征时,应该使用BULK INSERT / BCP:

评估选择

根据使用指导,你可以更好的评估哪种应用选择更符合你的数据需求。

在文件读取的例子中,你的需求不仅仅是往SQL Server中读入5000000条记录,还包括对这些记录的数据聚集。考虑到这些需求,确认以下哪个方法可以完成这项任务。注意,这里仅仅列出两个可行的方法。

◆方案1 - BULK INSERT解决方案 – 你当然可以使用BULK INSERT去从源文件读取数据,并装载到SQL Server中。但是,你还需要增加额外的操作,在把数据装载到目标表前对其进行聚集。一种方法是使用BULK INSERT把数据放入一个暂时的表,然后使用Transact-SQL对暂时表中的数据进行聚集,再用Transact-SQL把数据读入目标表中。

Elizabeth Vitt在商业智能领域拥有超过十年的商业系统开发,项目管理,咨询和培训经验。她在数据仓库,ETL和OLAP设计和实施方面还有着丰富的教学经验。

目录

简介