【发布时间】: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