我正在使用 dbms_jobs 并行运行存储过程。
除了比较每个程序的运行时间与并行运行它之外,还有什么方法可以知道并行运行程序是否更快/更有效?
无论如何在oracle中查看CPU /使用情况?
我正在使用 dbms_jobs 并行运行存储过程。
除了比较每个程序的运行时间与并行运行它之外,还有什么方法可以知道并行运行程序是否更快/更有效?
无论如何在oracle中查看CPU /使用情况?
这不是一个容易回答的问题,因为大多数分析都是针对作业的确切性质以及系统上运行的所有其他内容。
要问的关键问题是:
作为后者的示例,如果您有多个作业都需要对一个非常大的表进行全表扫描,那么您可以从同时运行它们中受益,因为它们可以从实例缓冲区中读取相同的块。实际上,一个会话将读取块,而其他会话将等待它们被读取。当它们在不同时间运行时,它们可能都必须产生物理 i/o 才能从磁盘读取块。
关于全表扫描的注意事项:来自全表扫描的块被加载到 db 块缓冲区以进行常规读取(除非通过在 10g 中启用串行直接路径读取另外指定)或加载到 PGA 以进行并行查询(除非 CACHE 另有提示)或串行直接路径在 11g 中读取。根据 11.2 文档http://docs.oracle.com/cd/E11882_01/,加载到 db 块缓冲区时,它们不会像单个块读取那样被标记为 MRU,而是“进入 LRU 列表的中间” server.112/e16508/memory.htm#CNCPT1224
在任何情况下,块都不必在内存中保存很长时间,因为会有一个或多个会话记录他们对读取它们的兴趣——大量的“缓冲区忙等待”将是多个会话的标志正在等待另一个人阅读他们感兴趣的块。