Mysql 如何同时运行存储过程

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 ...

我正在做一项工作,以调整一些存储过程,以应对如下情况:

有一个程序,我们称之为sp_summary,它将先做一些准备工作,然后像10个程序一样串行执行。基本上是:

   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

  • ServiceBroker:您可以设置队列、服务、激活过程,并将最大队列读取器设置为10。这将设置队列以同时获取10个任务。在激活过程中,您可以执行所需的过程。基本上,消息应该包含要运行的SQL

  • SQL代理:您可以创建10个SQL代理作业,用于检查同一个表(表a)的传入工作。每个作业将一次满足表中的一条记录,并继续这样做,直到表为空为止。创建另一个过程,在“表a”中插入包含10个SQL调用的10行,并启动所有10个SQL代理作业

  • 按照上述一位响应者的建议使用SSI


  • 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代理作业