如何使用ssis并行运行多个存储过程?

时间:2016-05-27 03:20:38

标签: sql-server stored-procedures ssis

我们在表格中有一个存储过程列表(超过1000个),需要每天早上执行。

存储过程彼此之间没有任何依赖关系。

我们尝试使用while循环和游标来执行它需要花费很多时间。

我们教过为每个存储过程创建作业并使用sp_start_job调用它们(sp_start_job以异步方式调用)我们获得了并行级别。

问题在将新存储过程添加到列表并且变得庞大时出现。

  1. 有些时候ppl错过了创建与工作相关的新存储过程

  2. DB因没有工作而被轰炸(DBA的可管理性问题)

  3. 注意:可能在任何一天更改的列表(可以在列表中添加或删除存储过程)。

3 个答案:

答案 0 :(得分:0)

添加到@ Nick.MacDermaid - 您可以利用package的MaxConcurrentExecutables属性来实现自定义并行性。当然,您需要拥有多个容器和相应的存储过程组。

Parallel Execution in SSIS

  

MaxConcurrentExecutables,包的属性。它定义了如何   许多任务(可执行文件)可以同时运行。它默认为-1   这被翻译为处理器加2的数量。请注意   如果你的盒子开启了超线程,这是合乎逻辑的   处理器而不是物理存在的处理器   计数。

答案 1 :(得分:0)

如果SP运行时间更长,我会将1000个SP分为5-10个数字,然后为每个类别分类1个SSIS包,然后将每个包的代理作业分类。然后,同时安排这些工作。

有许多方法可以实现循环,脚本和多种因素。你可以用不同的方式进行测试,并选择最好的方法。

注意:SSIS执行的性能取决于您的内存,处理器和硬件。

答案 2 :(得分:0)

您好,您可以使用以下代码来基本编写运行所有存储过程的脚本,如果添加新程序,它将自动添加到列表中

SELECT'EXEC '+SPECIFIC_NAME [Command] + ';'
FROM information_schema.routines 
WHERE routine_type = 'PROCEDURE'

在此之后,您将结果集放入制表符分隔的文本文件中,并将文件保存在某个位置。

使用此链接将文本导入执行SQL任务,第一个答案很有效

SSIS: How do I pull a SQL statement from a file into a string variable?

执行任务并且它应该可以工作,如果你需要缩小程序的数量,你可以在程序的名称中指定一个特定的前缀并在where子句中使用它

它将连续运行,对不起,我没有足够的代表发表评论