Mysql 如何同时运行存储过程
我正在做一项工作,以调整一些存储过程,以应对如下情况: 有一个程序,我们称之为sp_summary,它将先做一些准备工作,然后像10个程序一样串行执行。基本上是:Mysql 如何同时运行存储过程,mysql,sql,sql-server,stored-procedures,oracle11g,Mysql,Sql,Sql Server,Stored Procedures,Oracle11g,我正在做一项工作,以调整一些存储过程,以应对如下情况: 有一个程序,我们称之为sp_summary,它将先做一些准备工作,然后像10个程序一样串行执行。基本上是: create procedure sp_summary(date datetime) as Begin Declare @v1 varchar(10) ..... ..... exec sp_sub_1 exec sp_sub_2 ...
create procedure sp_summary(date datetime)
as
Begin
Declare @v1 varchar(10)
.....
.....
exec sp_sub_1
exec sp_sub_2
....
exec sp_sub_10
....
....
End
几乎每一个都需要2分钟,总共20分钟,他们所做的只是创建一个临时表,从源表捕获一些数据,计算一些列,然后插入到目标表中
问题是:
如何同时执行10个子SP,使每天20分钟变成每天2或5分钟。由于所有10个子SP都具有相同的源表和目标表,如何进行事务隔离以避免创建脏数据
注意:Informatica或SSIS或其他ETL工具不是一个选项。任何DBMS解决方案都很好您可以创建多个作业来执行每个存储过程。安排所有作业同时运行 假设J1到J10是您的作业,则所有作业应同时运行
为准备工作再创建一个作业,并在上一个计划作业时间前几分钟计划它。在Oracle中,您可以使用 比如说,
SQL> BEGIN
2 DBMS_SCHEDULER.create_job (
3 job_name => 'test_full_job_definition',
4 job_type => 'PLSQL_BLOCK',
5 job_action => 'BEGIN my_job_procedure; END;',
6 start_date => SYSTIMESTAMP,
7 repeat_interval => 'freq=hourly; byminute=0; bysecond=0;',
8 end_date => NULL,
9 enabled => TRUE,
10 comments => 'Job defined entirely by the CREATE JOB procedure.');
11 END;
12 /
PL/SQL procedure successfully completed.
您可以将所有过程安排为同时执行,而不是以一个接一个的过程方式执行它们 它不可能直接在SQL代码中出现,因为它的本质是串行的。你必须在这里使用“分而治之”的方法。为此,您可以使用ServiceBroker/sql代理/SSIS
IMO:我一直选择service broker,因为它更容易升级。你没有给一些dbms产品添加标签…只能添加5个标签,我认为这些都很好enoughjarls的评论很讽刺:-)你的语法暗示的是SQL Server,而不是MySQL或Oracle。@Raffaello.D.Huke是MySQL还是SQL Server?移除不可用的标记appropriate@CiucaS我在考虑这三个dbms的问题,这是在SQLSERVER中,但我们也得到了Oracle和Mysql可能有相同的情况,所以任何dbms的任何答案都将是巨大的,这是一个选项。有没有办法在一个作业中解决这个问题?据我所知,有两种方法,1.创建一个SSIS作业以并行运行5个存储过程。2.同时创建5个不同的SQL Server代理作业