【问题标题】:Disable parallel execution of SSIS packages at server level在服务器级别禁用 SSIS 包的并行执行
【发布时间】:2017-12-13 14:08:38
【问题描述】:

谁能建议是否有办法在服务器级别禁用或限制 SSIS 包的并行执行?

我有一个 SSIS 项目,其中包含来自多个数据源的大量包。我的开发和生产环境具有足够高的硬件规格,可以一次执行所有包并让它们运行完成工作正常。但是,我的测试服务器的规格要低得多,并且运行所有包会导致 CPU 最大化,并且一些包会意外终止。

更新:

关于场景的更多细节。我正在开发一个数据仓库,目前正在构建暂存层。我有 50 多个表(并且还在增长)和 50 多个 dtsx 包,每个包填充一个表。数据源包括跨多个本地服务器的 MSSQL、MySQL、文本文件和 MDB。

包从 VS2015 项目部署到 SQL 服务器,所有包都通过脚本排队等待同时执行。对包进行排队后,SQL Server 将 CPU 持续保持在 100%,从而导致与数据源的连接超时,有时包意外终止。

向测试服务器添加更多硬件不是一种选择,也不能将任务组合在更少的包中以利用包级的最大并发性。

我想限制 SQL Server 尝试在服务器级别并行运行的程序包数量。将 SQL Server 最大并行度从 0 修改为 1 似乎已经解决了这个问题。

【问题讨论】:

  • 你可以在你的 ssis 包上设置 maxConcurrentExecutables ,这使它只执行你想要的任务。假设您在一个文件中执行了 10 个包。然后您可以将 maxConcurrentExecutables 设置为 4 ex。那么它当时只会运行 4 次。或者,如果您在一个包中运行了多个 DFT。
  • 恐怕这行不通。 MaxConcurrentExecutables 只是限制包中可执行对象的数量。我正在尝试限制在服务器级别并行运行的包。
  • 但这取决于您的架构,然后您如何设计。 SQL 作业代理仅触发您拥有的那些包。把它们分开,不要让它们在主包中。
  • 服务器级设置更像是一个 DBA 问题。
  • @plaidDK 我有 50 多个表要填充,作为数据仓库暂存层的一部分。每个表都由其自己的包填充。再进一步拆分是不可能的。

标签: sql-server visual-studio-2015 ssis sql-server-2016 ssis-2016


【解决方案1】:

使用 SQL Server 的最大并行度设置似乎已经解决了这个问题。

【讨论】:

  • 这将导致 SQL Server 完成的所有其他工作仅限于您设置的 MAX DOP,而不仅仅是 SSIS。您现在可能正在解决一个问题,同时又创建了多个其他问题。
  • 谢谢克里斯。幸运的是,我所针对的测试服务器仅用于此过程。
  • 但这仅适用于 SQL Server 执行计划,这使得它需要更多资源。这绝对不能解决你的问题。它可能会调整您的服务器性能,但不会降低您的并行性。
  • @plaidDK 我已经更新了我的问题。更改服务器设置似乎已经解决了问题,但我愿意接受其他建议。
  • @Maff 您还可以将服务器切换到单用户模式以“修复”问题。但这并不能解决您的真正的 问题,只能掩盖它。数据库旨在供 多个 用户使用,无论是实际用户还是像 SSIS 这样的应用程序。数据仓库有很多超过 50 个表。编写适当的代理作业,或在您的包中使用适当的优先约束
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多