use*_*569 9 sql-server stored-procedures parallelism sql-server-2014
我希望尝试使用不同的参数但同时多次运行相同的存储过程。
我正在使用 SQL 2014
这样做的原因是该过程需要大约 7 个小时才能完成。它实际上多次执行相同的过程。因此,例如它可能会为每个分支构建一个新的数据库和表。
我想要做的是分解存储过程,以便我可以在每个分支中运行,然后并行运行每个查询。我已经通过在单独的查询窗口中运行它进行了测试,它的运行速度提高了近 80%。
谁能给我一份关于并行运行查询的傻瓜指南?
Bra*_*adC 10
有一次,我在 StackOverflow 上回答了这个问题,但在 DBA.SE 上也有这些信息,修订和更新似乎很有用。
只是为了完全明确:TSQL确实不(本身)具有异步启动其他TSQL操作的能力。
这并不意味着您仍然没有很多选择(其中一些在其他答案中提到):
sp_start_job. 如果您需要以编程方式监控它们的进度,只需确保每个作业都更新了一个自定义的 JOB_PROGRESS 表(或者您可以检查它们是否已经完成了使用Gregory A. Larsen这篇优秀文章中xp_sqlagent_enum_jobs所述的未记录功能)。您必须创建尽可能多的独立作业,以运行并行进程,即使它们使用不同的参数运行相同的存储过程。sp_oacreate和sp_oamethod启动一个新进程调用彼此存储过程,如本文所述,也是 Gregory A. Larsen。Parallel_AddSql和Parallel_Execute在如所描述的本文由Alan卡普兰(SQL2005 +只)。如果是我,我可能会在更简单的场景中使用多个 SQL 代理作业,在更复杂的场景中使用 SSIS 包。
在您的情况下,除非您尝试启动 200 个单独的线程,否则多个计划的代理作业听起来像是一个简单且易于管理的选择。
最后一条评论:SQL 已经尝试尽可能并行化单个操作*。这意味着同时运行 2 个任务而不是依次运行并不能保证它会更快完成。仔细测试,看看它是否真的改善了什么。
我们有一个开发人员创建了一个 DTS 包来同时运行 8 个任务。不幸的是,它只是一个 4-CPU 服务器 :)
*假设默认设置。这可以通过更改服务器的最大并行度或关联掩码,或使用 MAXDOP 查询提示来修改。
小智 0
由于这让我想起了我在工作中遇到的一个用例,我将介绍一下我们如何解决它:
首先,正如已经说过的,我认为 SQL 中不存在类似 Unix“nohup”的东西:一个连接 = 一个语句,以及所有相关内容(锁定、提交、错误...)
我们找到了使用免费 ETL Talend 的方法,将其配置为连接到数据库,并运行一堆包装存储过程的并行作业。
我们Iterate根据需要多次使用该组件和循环,从而启用该multi-threads选项。
| 归档时间: |
|
| 查看次数: |
38231 次 |
| 最近记录: |