如何让部署在SQL Server的7个SSIS项目并行启动运行?
当然可以让这7个SSIS项目的MasterPackage并行运行!默认情况下它们排队执行,大概率是你的执行方式或者SSIS目录的并发限制在搞鬼,咱们一步步来搞定:
一、先检查SSISDB的全局并发限制
SSIS目录(SSISDB)本身有个全局的并发执行上限,这可能是卡住你并行的关键:
- 打开SSMS,连接到你的SQL Server实例
- 展开「Integration Services Catalogs」>「SSISDB」,右键点SSISDB选「属性」
- 切换到「配置」标签,找到「Maximum concurrent executables」(最大并发可执行数),确保这个值≥7(如果服务器资源够,设成10甚至更高都没问题)
- 划重点:这个值是全局的,要根据服务器的CPU、内存情况调整,别贪多把资源榨干了
二、用SQL Server Agent实现并行触发
如果是用Agent作业来启动包,别把所有MasterPackage塞到同一个作业的步骤里(那样会串行),应该:
- 给每个项目的MasterPackage单独建一个Agent作业
- 要么给这7个作业设置完全相同的启动时间,要么写一个“触发作业”,用
sp_start_job同时启动这7个作业:-- 触发多个作业并行启动 EXEC msdb.dbo.sp_start_job N'Job_Project1_Master'; EXEC msdb.dbo.sp_start_job N'Job_Project2_Master'; -- 继续加剩下5个作业的调用 - 另外,检查Agent代理的并发限制:展开「SQL Server Agent」>「代理」>「作业代理」,右键你的代理选「属性」,在「高级」标签里确认「Maximum number of concurrent jobs」不是1,至少要≥7
三、直接用SSISDB存储过程批量启动
不想用Agent的话,直接写个SQL脚本调用SSISDB的存储过程就行,每个包的启动都是异步的,自然就并行起来了:
-- 启动项目1的MasterPackage DECLARE @exec_id1 INT; EXEC [SSISDB].[catalog].[create_execution] @package_name = N'MasterPackage.dtsx', @execution_id = @exec_id1 OUTPUT, @folder_name = N'你的项目文件夹1', @project_name = N'项目1', @use32bitruntime = 0, @reference_id = NULL; EXEC [SSISDB].[catalog].[start_execution] @execution_id = @exec_id1; -- 启动项目2的MasterPackage DECLARE @exec_id2 INT; EXEC [SSISDB].[catalog].[create_execution] @package_name = N'MasterPackage.dtsx', @execution_id = @exec_id2 OUTPUT, @folder_name = N'你的项目文件夹2', @project_name = N'项目2', @use32bitruntime = 0, @reference_id = NULL; EXEC [SSISDB].[catalog].[start_execution] @execution_id = @exec_id2; -- 复制上面的代码,替换文件夹和项目名,搞定剩下5个
执行这个脚本的时候,每个start_execution都会立刻触发包的执行,不会等上一个完成。
四、几个要注意的坑
- 资源扛不扛得住:7个包并行跑会吃不少CPU、内存和磁盘IO,先在测试环境测一遍,监控资源使用率,别把生产服务器搞崩了
- 包内部的并发限制:如果你的MasterPackage自己设置了「Maximum concurrent executables」(在包属性里),也要确保这个值足够,但你要的是整个MasterPackage并行,所以主要看全局的SSISDB设置
- 错误要单独监控:并行的时候每个包的错误是独立的,一定要做好日志和告警,别到时候某个包挂了都不知道
内容的提问来源于stack exchange,提问作者VladS
相关产品推荐
相关产品推荐

