ssis包将使用哪些系统内存?

时间:2012-05-24 16:08:59

标签: sql-server ssis

我对ssis包中的内存使用情况几乎没有疑问。

  1. 如果我正在从服务器A加载数据到服务器B并且ssis软件包在我的桌面系统中并通过BIDS运行,那么我的桌面系统中是否会发生缓冲区创建(内存使用情况)?如果这是例如,性能(与服务器相比内存较低)会慢吗?

  2. 如何在桌面系统中开发软件包时启用服务器资源的使用?

  3. 请帮助我,如果我有3位ssis开发人员并且所有人都在一次开发不同的软件包,那么最好的开发方法是什么?

3 个答案:

答案 0 :(得分:6)

要扩展#3,我发现允许团队处理单个SSIS解决方案的最佳方法是将问题(包)分解为越来越小的块并通过父子/主控制来控制它们的调用-slave type relationship。

例如,解决方案涉及加载数据仓库。我可能有2个Controller包,FactController.dtsx和DimensionController.dtsx。他们的责任是调用解决需求的各种包(加载事实或维度)。也许我的DimensionProductLoader包正在处理雪花(它需要更新Product和SubProduct表),以便将其分解为2个包。

所有这一切的目标是将开发过程分解为可管理的块,以避免对单个包的并发访问。合并XML不会有效利用您的时间。

所有这一切的唯一共享资源是SSIS项目文件(dtproj),它只是一个枚举危害项目的软件包的XML文档。创建一个具有良好命名的空白包的前期骨架项目,您可以跳过尝试将项目合并回存储库的人们的一些初步痛苦。我发现至少对于TFS来说,一次性类型的合并要比每个人都检查他们的XML团队要好得多。

答案 1 :(得分:4)

  1. 是。程序包与启动它的程序在同一台计算机上运行。即使程序加载远程存储在另一台服务器上的软件包,该软件包也会在本地计算机上运行。

  2. 如果服务器资源是指服务器CPU,那么你不能。就像使用网络上任何其他计算机的资源一样。当然,如果你有一个在SQL服务器上运行select的OleDBSource,那么“运行”select的CPU将是SQL Server上的那个,显然,但是一旦检索到结果集,它就会被包中的计算机处理。正在运行。

  3. 像任何其他开发方法一样。如果您有一个由3位开发人员开发的C#项目的课程,您是如何做到的?您可以让每个开发人员处理同一个文件并合并更改,毕竟包是一个xml文件,但更复杂。我不推荐。我一直在处理不止一个开发人员在同一个软件包上工作的情况,但不是在同一时间。

答案 2 :(得分:3)

扩展迭戈和比尔的答案:

1)迭戈有这个大概是正确的,我只想补充一点:程序包在运行它的计算机上运行,​​但更糟糕的是,通过BIDS运行程序包甚至不会接近你将在服务器上看到的程序BIDS用来运行包是一个运行本地的32位进程。由于与在32位子系统中运行相关的限制,以及将网络缓冲区的所有数据复制到工作站内存中的缓冲区,将其转换为包流,然后再次推送,因此速度会慢通过网络到目标服务器。这适用于在测试环境中测试数据的小子集,但不应用于估计服务器系统上的性能。

2)迭戈有这个正确的。如果要查看服务器性能,请将其部署到测试服务器并在那里运行。

3)billinkc有这个正确的。 TFS中SSIS的一大缺点是没有一种优雅的方式来共享单个包的工作。如果您想在一个进程中使用多个开发人员,请将其拆分为较小的块,并且只允许一个开发人员处理每个部分。只要他们不是同时开发相同的包,你应该没事。