【问题标题】:How to call multiple stored procedures in parallel in SQL ServerSQL Server中如何并行调用多个存储过程
【发布时间】:2021-05-21 04:21:15
【问题描述】:

我在 SQL Server 数据库中有 3 个存储过程。

EXEC sp_test_1 (ID)
GO

EXEC sp_test_2 (ID)
GO

EXEC sp_test_3 (ID)
GO

执行此操作时,每个存储过程需要 15 分钟才能完成,总共需要 45 分钟。

当我在每个会话中执行每个存储过程时。

Session 1 : EXEC sp_test_1 (ID)

Session 2 : EXEC sp_test_2 (ID)

Session 3 : EXEC sp_test_3 (ID)

它在 15 分钟内完成,并提供了良好的性能提升。

我正在寻找 SQL Server 中的任何选项来实现并行性和除 SSIS 之外的任何其他方向。

任何人都可以建议一种方法吗?

【问题讨论】:

  • @EvaldasBuinauskas 我已经完成了,但足够具体的答案来解决
  • 您是尝试从任何 ETL 工具并行调用这 3 个还是仅使用 SQL?
  • 在 ETL (SSIS) 我知道流程。我只在 SQL 中查找
  • SQL 按顺序运行,@mohan111。您不能编写包含同时运行的多个语句的批处理。如果要同时运行 3 个单独的语句,则需要 3 个单独的连接来运行所述语句。这就是您可以在 SSIS 中实现此目的的原因,因为您有 3 个执行 T-SQL 任务,每个任务运行不同的语句。

标签: sql sql-server sql-server-2012 ssms


【解决方案1】:

你可以这样做:

首先你应该在每个过程中创建一个工作。

Declare @Job1 uniqueidentifier,
@Job2 uniqueidentifier,
@Job3 uniqueidentifier

-- CREATE JOB1
EXEC msdb.dbo.sp_add_job @job_name = 'JOB1' , @job_id = @Job1 OUTPUT;
EXEC msdb.dbo.sp_add_jobserver @job_id = @Job1 , @server_name = N'(LOCAL)'
EXEC msdb.dbo.sp_add_jobstep @job_id = @Job1 , @step_name = 'execute' , @command = 'EXEC sp_test_1' , @database_name = 'DBNAME'

-- CREATE JOB2
EXEC msdb.dbo.sp_add_job @job_name = 'JOB2' , @job_id = @Job2 OUTPUT;
EXEC msdb.dbo.sp_add_jobserver @job_id = @Job2 , @server_name = N'(LOCAL)'
EXEC msdb.dbo.sp_add_jobstep @job_id = @Job2 , @step_name = 'execute' , @command = 'EXEC sp_test_2' , @database_name = 'DBNAME'

-- CREATE JOB3
EXEC msdb.dbo.sp_add_job @job_name = 'JOB3' , @job_id = @Job3 OUTPUT;
EXEC msdb.dbo.sp_add_jobserver @job_id = @Job3 , @server_name = N'(LOCAL)'
EXEC msdb.dbo.sp_add_jobstep @job_id = @Job3 , @step_name = 'execute' , @command = 'EXEC sp_test_3' , @database_name = 'DBNAME'

现在你可以像这样异步执行proc了

-- now you can, execute proc be async like this
EXEC msdb.dbo.sp_start_job @job_name = 'JOB1';
EXEC msdb.dbo.sp_start_job @job_name = 'JOB2';
EXEC msdb.dbo.sp_start_job @job_name = 'JOB3';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    • 2013-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多