并行ssis执行
我有大约112个包裹。实际上,这些包是使用包主程序顺序执行的并行ssis执行,ssis,ssis-2012,Ssis,Ssis 2012,我有大约112个包裹。实际上,这些包是使用包主程序顺序执行的 我需要并行执行这些包。我创建包主控并手动添加所有这些包,但这不便于支持和维护。是否有一种方法或想法可以从表参数中提取所有包的名称,例如,然后自动并行执行它们,而不是手动添加包?您可以在foreach循环(在SSIS中)中运行execute SQL,也可以在SSMS中的游标中运行 这是一个假设,假设您部署到SSIDB BEGIN DECLARE @execution_id BIGINT EXEC [SSISDB].[ca
我需要并行执行这些包。我创建包主控并手动添加所有这些包,但这不便于支持和维护。是否有一种方法或想法可以从表参数中提取所有包的名称,例如,然后自动并行执行它们,而不是手动添加包?您可以在foreach循环(在SSIS中)中运行execute SQL,也可以在SSMS中的游标中运行 这是一个假设,假设您部署到SSIDB
BEGIN
DECLARE @execution_id BIGINT
EXEC [SSISDB].[catalog].[create_execution]
@package_name=N'[Package Name].dtsx'
, @project_name=N'[ProjectName]'
, @folder_name=N'[FolderName]'
, @use32bitruntime=False
, @reference_id=NULL
, @execution_id=@execution_id OUTPUT
-- Execute the package
EXEC [SSISDB].[catalog].[start_execution] @execution_id
END
如果需要,还可以添加参数
这是一篇关于不同应用程序的好文章:
注意:默认为异步运行SSIS不支持这种开箱即用的场景。有一些方法可以做到这一点,但有一些局限性 异步脱离主进程执行 @KeithL的回答中描述的方法非常简单,但有一些缺点:
- 每个子包都在自己的执行中启动。您可能会启动所有112个遇到资源短缺的包。在这种情况下,SSIS引擎不协调总体资源
- 包在自己的执行中启动。它不继承父包参数或连接管理器。您必须通过调用SQL代码或环境变量映射重新设置它
- 从支持的角度来看,SSIS日志中有113个独立执行。不容易连接,尤其是在高负载系统上
i
和循环存在条件i==0在SSIS中创建For循环块。在块中,设置i=select count(*)from with(updlock,readpass)
with SQL任务,如果i==0,则处理到伪表达式任务;这是一个循环中断路径。否则,使用路径条件i>0
从包队列中读取一行,从队列中删除if,并使用包运行任务启动所选包执行
相当复杂,但这还不是故事的结尾。在SSIS主包中制作复制循环块的多个副本。因此,您将获得一个有限并发的并发执行框架。您可以使用SQL启动您的包,但您仍在维护一些东西(在本例中是一个表)。@KeithL您能解释一下吗?我需要并行执行包。我已经使用foreach循环按顺序执行包。如果在foreach循环中执行,它将异步(并行)运行并启动所有包。