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

我对ssis包中的内存使用有几个问题。

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

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

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

0
额外 编辑
意见: 1

3 答案

拓展迭戈和比尔的答案:

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

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

3)billinkc有这个正确的。 TFS中SSIS的一大缺点是,没有一种在单个包上共享工作的优雅方式。如果您希望在一个进程中使用多个开发人员,请将其分解为更小的块,并让每个开发人员仅使用一个开发人员。只要他们不在同一时间开发相同的软件包,你应该没问题。

0
额外
感谢所有的确认,+1,因为你在第1项上添加了很好的信息
额外 作者 Diego,
在BIDS/SSDT中运行的32位或者不包含该调试器的进程将进一步降低速度。更准确的测试(内存,吞吐量等)将从命令行(dtexec /文件C:\ path \ to \ myPackage.dtsx)调用软件包
额外 作者 billinkc,
  1. 是。程序包与启动它的程序在同一台计算机上运行。即使程序加载远程存储在另一台服务器上的程序包,该程序包也会在本地计算机上运行。

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

  3. 像其他任何开发方法一样。如果你有一个由3位开发人员开发的C#项目的类,那么你怎么做?毕竟一个软件包是一个xml文件,你可以让每个开发人员在同一个文件上工作并合并所做的更改,但是更复杂。我不会推荐。我曾经遇到过不止一个开发人员在同一个软件包上工作但不完全同时工作的情况。

0
额外

为了扩展#3,我发现允许团队使用单个SSIS解决方案的最佳方式是将问题(包)分解成越来越小的块,并通过父 - 子/主 - 从模式来控制其调用关系。

例如,该解决方案涉及加载数据仓库。我可能会有2个控制器包,FactController.dtsx和DimensionController.dtsx。他们的责任是调用解决需求的各种软件包(加载事实或维度)。也许我的DimensionProductLoader包处理雪花(它需要更新产品和SubProduct表),以便分解成2个包。

所有这些的目标是将开发过程分解成可管理的块,以避免同时访问单个包。合并XML不会对您的时间产生有用的影响。

所有这些的唯一共享资源是SSIS项目文件(dtproj),它仅仅是一个枚举包含项目的软件包的XML文档。使用命名空白的包创建一个前期骨架项目,您可以跳过一些围绕试图将项目合并到您的存储库的人的初始痛苦。我发现对于TFS来说,一次性合并的好处至少比每个人都重新检查它们的XML小块更好。

0
额外
非常好的主意。
额外 作者 Diego,