技术开发 频道

Integration Services:SQL Server2005的高性能策略



优化操作

    对于这一序列中的每一步操作,你都可以使用性能分析,来指导你寻找优化和提升整个过程的机会。例如,在操作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条源记录的例子很简单,这些相同的原则却可以被直接应用到更大型和更复杂的数据读取任务中,这个任务可以包含多个数据源,需要复杂的数据转换,而且必须被装载到多个目的表中。

0
相关文章