5

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

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

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

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

4

3 回答 3

6

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

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

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

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

于 2012-05-24T20:25:40.003 回答
4
  1. 是的。包与启动它的程序在同一台计算机上运行。即使程序加载远程存储在另一台服务器上的包,该包也会在本地计算机上运行。

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

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

于 2012-05-24T20:01:18.143 回答
3

扩展迭戈和比尔的答案:

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

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

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

于 2012-05-24T21:01:06.493 回答