Oracle克服循环时间的最佳方法

时间:2014-11-01 19:59:14

标签: oracle performance loops plsql

我有一个代码,其中有循环来处理数百万条记录。代码如下所示:

FOR C1
 IN (SELECT a
     FROM tbl1
 WHERE <some conditions>)
LOOP

/*Some processing which took less than a sec to process a record*/

/*Call to procedures and functions.*/

END LOOP;

上面的循环代码可以在4秒内处理大约9条记录。我有数百万条记录要通过循环处理。

执行此任务的最佳方法是什么? 我可以并行执行循环内的逻辑吗?

1 个答案:

答案 0 :(得分:2)

  

&#34;我可以并行执行循环中的逻辑吗?&#34;

谁能说出来?您还没有提供足够的信息来继续。我的意思是它甚至不清楚驱动查询是否适合分成合适的块。

并行可能会有所帮助,但它并不能保证。这取决于你拥有多少CPU,正在进行的其他工作,以及基本流程的确切性质:即使其中一个&#34;调用程序和函数&#34;发出锁定你有一个基本的串行过程。

  

&#34;执行此任务的最佳方法是什么?

一般建议是降低每条记录的个人时间:

  1. 您是否需要将其作为逐行操作?使用纯SQL的集合操作可能比PL / SQL循环更快。同样,这取决于您正在做什么的具体细节。

  2. 使用PL / SQL分析。 11g中的Oracle DBMS_HPROF tool在精确指出所有时间的位置时都是一个奇迹。不幸的是,它需要DBA授予访问权限并创建目录对象,但它绝对值得为它提出RFC。 Find out more。 (在早期版本中,DBMS_PROFILER虽然有用但有点受限;它还需要DBA干预。)