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



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

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条记录。我有数百万条记录要通过循环处理。

完成这项任务的最佳方法是什么?我可以并行地执行循环中的逻辑吗?

"我可以并行执行循环中的逻辑吗?"

谁能说出来?你还没有提供足够的信息来继续。我的意思是,甚至不清楚驾驶查询是否适合划分为合适的块。

并行可能会有所帮助,但这并不能保证。这取决于你有多少CPU,其他工作正在进行,关键是底层进程的确切性质:如果其中一个"调用过程和函数"发出了锁,那么你就有了一个基本上串行的进程。

"完成这项任务的最佳方法是什么?

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

  1. 您需要将其作为逐行操作吗?使用纯SQL的集合操作可能比PL/SQL循环快得多。同样,这取决于你正在做的事情的具体情况。

  2. 使用PL/SQL分析。11g中的Oracle DBMS_HPROF工具在精确定位所有时间的方向方面是一个奇迹。不幸的是,它需要DBA授予访问权限并创建一个目录对象,但它绝对值得为它提出一个RFC。了解更多信息。(在早期版本中,有DBMS_PROFILER,它有点受限,但仍然有用;它还需要DBA干预)。

相关内容

最新更新