我怎么知道存储过程的并行运行是否有效?

时间:2013-02-15 06:26:46

标签: performance oracle plsql parallel-processing oracle10g

我正在使用dbms_jobs并行运行存储过程。

除了比较每个程序的运行时间与并行运行它之外, 另一种方法是知道并行运行程序是否更快/更有效?

有没有看到oracle中的CPU /用法?

1 个答案:

答案 0 :(得分:2)

这不是一个容易回答的问题,因为大多数分析都是关于作业的确切性质以及系统上运行的所有其他内容。

要问的关键问题是:

  • 系统是否有足够的可用资源在我想要的时候并行运行作业?
  • 代码中是否有任何内容表明作业可能会同时受益,反之亦然?

作为后者的一个示例,如果您有多个作业都需要对一个非常大的表进行全表扫描,那么您可以从同时运行它们中获益,因为它们可以从中读取相同的块。实例缓冲区。实际上,一个会话将读取块,其他会等待它们被读取。当它们在不同的时间运行时,它们可能都需要进行物理i / o才能从光盘读取块。

关于全表扫描的注意事项:全表扫描中的块被加载到db块缓冲区以进行常规读取(除非通过在10g中启用串行直接路径读取另行指定)或加载到PGA中以进行并行查询(除非使用CACHE暗示) )或串行直接路径读取11g。当加载到db块缓冲区时,它们不会被标记为MRU,就像单个块读取的情况一样,但是根据11.2文档http://docs.oracle.com/cd/E11882_01/server.112/e16508/memory.htm#CNCPT1224

将其标记为“进入LRU列表的中间”

在任何情况下,块都不必在内存中保存很长时间,因为会有一个或多个会话注册它们对读取它们的兴趣 - 大量的“缓冲区忙等待”将是标志多个会话正在等待另一个会话读取他们感兴趣的块。