定义容量
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条源记录的例子很简单,这些相同的原则却可以被直接应用到更大型和更复杂的数据读取任务中,这个任务可以包含多个数据源,需要复杂的数据转换,而且必须被装载到多个目的表中。
应用
根据定义好的一组数据整合操作以及对所需数据容量进行的评估,可以明确出应用因素,来帮助你决定那种数据整合应用最符合那些需求。
理解应用的使用
文章来源于领测软件测试网 https://www.ltesting.net/