首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >并行运行存储过程

并行运行存储过程
EN

Database Administration用户
提问于 2017-05-10 20:03:13
回答 3查看 50.8K关注 0票数 12

我希望尝试使用不同的参数多次运行相同的存储过程,但同时运行。

我在使用SQL 2014

这样做的原因是,这个过程大约需要7个小时才能完成。它实际上做了很多次相同的过程。因此,例如,它可能为每个分支构建一个新的数据库和表。

我想要做的是分解存储过程,这样我就可以在每个分支中运行,然后并行地运行每个查询。我已经通过在单独的查询窗口中运行它来测试它,它的运行速度快了近80%。

有人能给我一个虚拟人指南来并行运行查询吗?

EN

回答 3

Database Administration用户

发布于 2017-05-11 13:57:30

在某种程度上,我是在StackOverflow回答了这个问题,但是在DBA.SE上获得、修改和更新这些信息似乎也是有用的。

为了完全明确起见: TSQL本身不具备异步启动其他TSQL操作的能力。

这并不意味着你仍然没有太多的选择(其中一些在其他答案中提到):

  • start作业:创建多个SQL作业,或者安排它们在所需的时间运行,或者从使用sp_start_job存储的“主控件”异步启动它们。如果您需要以编程方式监视它们的进度,只需确保每个作业都更新一个自定义JOB_PROGRESS表(或者您可以检查它们是否已经使用了GregoryA.Larsen在这篇优秀的文章中描述的无文档函数xp_sqlagent_enum_jobs )。您必须创建尽可能多的独立作业,以满足运行并行进程的要求,即使它们使用不同的参数运行相同的存储proc。
  • SSIS包:创建一个带有简单分支任务流的SSIS包。SSIS将以单独的spids启动这些任务,SQL将并行执行这些任务。
  • 自定义应用程序:使用您选择的语言(C#、Powershell等)编写一个简单的自定义应用程序,使用该语言提供的异步方法。调用每个应用程序线程上存储的SQL proc。
  • OLE自动化:在SQL中,使用sp_oacreatesp_oamethod启动一个新的进程,调用彼此存储的proc,如GregoryA.Larsen在这篇文章中所描述的那样。
  • Service :研究如何使用服务经纪人,一个本文中异步执行的良好示例
  • CLR并行执行:使用由Alan (仅限Parallel_AddSql )在这篇文章中描述的CLR命令Parallel_Execute和SQL2005+。
  • 计划的Windows任务:列出完整性,但我不喜欢这个选项。

如果是我,我可能会在更简单的场景中使用多个SQL代理作业,在更复杂的场景中使用SSIS包。

在您的情况下,除非您试图启动200个单独的线程,否则多个计划好的代理作业听起来是一个简单且易于管理的选择。

最后一个注释: SQL已经尝试在任何可能的情况下并行化各个操作。这意味着在同一时间运行两个任务而不是在彼此之后运行并不能保证它会更快地完成。仔细测试,看看它是否真的改善了任何东西。

我们有一个开发人员创建了一个DTS包,以便同时运行8个任务。不幸的是,它只是一个4 CPU服务器:)

*假定默认设置。可以通过更改服务器的最大并行度或亲和性掩码,或者使用MAXDOP查询提示来修改这一点。

票数 13
EN

Database Administration用户

发布于 2014-11-26 08:25:01

你最好的选择是用相同的时间表创建三个不同的工作岗位,同时启动这些工作。根据作业所做的事情,您应该小心地监视阻塞和死锁。

另一个选项是创建一个带有N个操作符的SSIS包,以便并行调用SPs

票数 2
EN

Database Administration用户

发布于 2017-05-10 21:28:32

由于这让我想起了我在工作中使用过的一个用例,我将介绍我们如何解决它:

前面已经说过,我不认为任何Unix "nohup"-like都存在于SQL中:一条连接=一条语句,其中包含一切(锁、提交、错误.)

我们找到了使用免费ETL的方法,将其配置为连接到DB,并运行一堆包装存储过程的并行作业。

我们根据需要使用了Iterate组件和循环,启用了multi-threads选项。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/173265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档