我希望尝试使用不同的参数多次运行相同的存储过程,但同时运行。
我在使用SQL 2014
这样做的原因是,这个过程大约需要7个小时才能完成。它实际上做了很多次相同的过程。因此,例如,它可能为每个分支构建一个新的数据库和表。
我想要做的是分解存储过程,这样我就可以在每个分支中运行,然后并行地运行每个查询。我已经通过在单独的查询窗口中运行它来测试它,它的运行速度快了近80%。
有人能给我一个虚拟人指南来并行运行查询吗?
发布于 2017-05-11 13:57:30
在某种程度上,我是在StackOverflow回答了这个问题,但是在DBA.SE上获得、修改和更新这些信息似乎也是有用的。
为了完全明确起见: TSQL本身不具备异步启动其他TSQL操作的能力。
这并不意味着你仍然没有太多的选择(其中一些在其他答案中提到):
sp_start_job存储的“主控件”异步启动它们。如果您需要以编程方式监视它们的进度,只需确保每个作业都更新一个自定义JOB_PROGRESS表(或者您可以检查它们是否已经使用了GregoryA.Larsen在这篇优秀的文章中描述的无文档函数xp_sqlagent_enum_jobs )。您必须创建尽可能多的独立作业,以满足运行并行进程的要求,即使它们使用不同的参数运行相同的存储proc。sp_oacreate和sp_oamethod启动一个新的进程,调用彼此存储的proc,如GregoryA.Larsen在这篇文章中所描述的那样。Parallel_AddSql )在这篇文章中描述的CLR命令Parallel_Execute和SQL2005+。如果是我,我可能会在更简单的场景中使用多个SQL代理作业,在更复杂的场景中使用SSIS包。
在您的情况下,除非您试图启动200个单独的线程,否则多个计划好的代理作业听起来是一个简单且易于管理的选择。
最后一个注释: SQL已经尝试在任何可能的情况下并行化各个操作。这意味着在同一时间运行两个任务而不是在彼此之后运行并不能保证它会更快地完成。仔细测试,看看它是否真的改善了任何东西。
我们有一个开发人员创建了一个DTS包,以便同时运行8个任务。不幸的是,它只是一个4 CPU服务器:)
*假定默认设置。可以通过更改服务器的最大并行度或亲和性掩码,或者使用MAXDOP查询提示来修改这一点。
发布于 2014-11-26 08:25:01
你最好的选择是用相同的时间表创建三个不同的工作岗位,同时启动这些工作。根据作业所做的事情,您应该小心地监视阻塞和死锁。
另一个选项是创建一个带有N个操作符的SSIS包,以便并行调用SPs
发布于 2017-05-10 21:28:32
由于这让我想起了我在工作中使用过的一个用例,我将介绍我们如何解决它:
前面已经说过,我不认为任何Unix "nohup"-like都存在于SQL中:一条连接=一条语句,其中包含一切(锁、提交、错误.)
我们找到了使用免费ETL的方法,将其配置为连接到DB,并运行一堆包装存储过程的并行作业。
我们根据需要使用了Iterate组件和循环,启用了multi-threads选项。
https://dba.stackexchange.com/questions/173265
复制相似问题