Joe*_*orn 11 sql t-sql sql-server parallel-processing sql-server-2000
我们有一个每晚运行的存储过程,反过来启动了许多其他程序.其中一些程序在逻辑上可以与其他一些程序并行运行.
WAITFOR DELAY?目前我们还在使用SQL Server 2000.
作为旁注,这很重要,因为主程序是响应从大型机系统完成从服务器到服务器的数据而启动的.大型机转储每晚大约需要2个小时,我们无法控制它.因此,我们一直在努力寻找缩短处理时间的方法.
Bra*_*adC 13
我最近不得不对此进行研究,因此发现这个老问题正在寻求更完整的答案.完全明确:TSQL(本身)不能异步启动其他TSQL操作.
这并不意味着你仍然没有很多选择(其中一些在其他答案中提到):
sp_start_job.你可以检查一下他们是否已经完成了使用Gregory A. Larsen 这篇优秀文章中xp_sqlagent_enum_jobs描述的无证功能 .(或者有自己更新自己的JOB_PROGRESS表作为克里斯暗示的工作.)你会从字面上来为你创建预期运行的每个并行处理单独的作业,即使它们运行的是具有不同的参数相同的存储过程.sp_oacreate和sp_oamethod启动一个调用其他存储过程的新进程,如本文所述,Gregory A. Larsen也是如此.Parallel_AddSql,Parallel_Execute如Alan Kaplan 撰写的本文所述(仅限SQL2005 +).我对Service Broker或CLR没有太多经验,所以我无法对这些选项发表评论.如果是我,我可能会在更简单的场景中使用多个作业,而在更复杂的场景中使用DTS/SSIS包.
最后一条评论:SQL已经尝试在可以*的情况下并行化各个操作.这意味着同时运行2个任务而不是相互运行并不能保证它会更快完成.仔细测试,看它是否真的改善了.
我们有一个开发人员创建了一个DTS包,可以同时运行8个任务.不幸的是,它只是一个4 CPU服务器:)
*假设默认设置.这可以通过更改服务器的最大并行度或亲和性掩码,或使用MAXDOP查询提示进行修改.