DB2 LUW并行作业执行

时间:2018-05-12 14:07:35

标签: db2 job-scheduling db2-luw dbms-job

我一直在DB2 LUW数据库中工作,我想将程序作为并行作业提交。意思是我有一个处理器会对一个表执行一些DDL,DML语句。这个表有大量的数据,同样的程序需要运行几个并行运行的表。

我使用DBMS_JOB.SUBMIT语句提交作业,并使用DBMS_JOB.RUN语句执行作业。我有工作处理程序,有助于并行执行此操作。

但每个工作都按顺序执行(意味着第一个工作完成后第二个工作开始,第二个工作完成第三个工作后开始。

**我的第一个问题** 如何并行运行DBMS_JOB?

我面临的第二个问题是,不完整的会议仍在等待完成所有工作。一旦完成所有工作,我就无法使用该特定会话,而我可以访问使用相同的会话。

**我的第二个问题** *如何使会话可访问,而不是等待所有已完成的作业*

请帮助我先生/女士。

1 个答案:

答案 0 :(得分:2)

DBMS_JOB是Db2-LUW的Administrative Taks Scheduler(ATS)的接口,以便与Oracle RDBMS兼容。但是,您也可以通过ADMIN_TASK_ADD和相关程序直接独立于DBMS_JOB使用ATS。

我的经验是db2acd(实现包括ATS在内的自主操作的进程)是不可靠的,特别是当ulimits配置错误时,它在某些情况下无声地运行作业。它还有一个5分钟的唤醒来检查可能令人沮丧的新工作,它需要一个已经激活的数据库,这对某些用例来说不方便。

我不建议将Db2 ATS用于应用程序层功能。完整的功能企业调度程序存在是有充分理由的。

对于并行调用,我会使用企业调度工具(如果可用)或失败 - 使用操作系统提供的调度程序在Db2服务器上或在客户端最坏的情况下,在两种情况下都要小心每个存储过程调用都是它自己的调度作业,它有自己的Db2连接。

通过每个存储过程调用使用Db2连接,并同时安排它们,只要它们的操作不会导致相互争用,它们就会并行运行。

除此之外,我相信如果工作定义正确,ATS将同时开始工作。 检查ADMIN_TASK_LIST和ADMIN_TASK_STATUS管理视图的内容,并确认db2diag条目(diaglevel 4可能会提供更多详细信息,即使您必须暂时使用它)。

调用SQL PL(或PL / SQL)存储过程相对于调用者是同步的,这意味着Db2连接被阻塞,直到存储过程返回。你不能让会话可以访问"如果它正在等待存储过程完成,但您可以打开新连接。

对于使用C,C ++或Java或C ++ / CLR编写的存储过程,存在不同的选项。他们有更多的自由。基于消息传递/代理的解决方案存在其他选项uch取决于可用的技能组合,工具集和经验。但总的来说,保持简单是明智的。