Oracle dbms_mview.refresh中parallelism参数的值提示

Oracle dbms_mview.refresh中parallelism参数的值提示,oracle,plsql,parallel-processing,Oracle,Plsql,Parallel Processing,我有八个物化视图,每个视图包含大约1000行。在每分钟运行一次的时间非常关键的作业中,它们会使用按需强制进行刷新。刷新时,视图需要传递数据 我想使用以下命令进行刷新: BEGIN dbms_mview.refresh(list => 'MVIEW1, MVIEW2, [...]', atomic_refresh => TRUE); END; 现在存在parallelism参数。我想,为它设定一个明智的、经过深思熟虑的价值是很酷和聪明的

我有八个物化视图,每个视图包含大约1000行。在每分钟运行一次的时间非常关键的作业中,它们会使用
按需强制
进行刷新。刷新时,视图需要传递数据

我想使用以下命令进行刷新:

BEGIN
  dbms_mview.refresh(list => 'MVIEW1, MVIEW2, [...]',
                     atomic_refresh => TRUE);
END;
现在存在
parallelism
参数。我想,为它设定一个明智的、经过深思熟虑的价值是很酷和聪明的

对于此参数的值是否有一般公认的提示?它是否应该等于物化视图的数量(同时保持合理的限制)


谢谢帮助。

在考虑并行性参数时,与Oracle中的任何并行操作一样,你应该真正考虑CPU的数量和可用的I/O容量。还可以考虑,你能负担得起消耗所有可用的CPU,还是需要为其他用户留出一些容量。 另外,请注意,即使设置了parallelism参数,并行性也不会生效,除非将物化视图创建为并行视图

这里有一个关于这个主题的漂亮的小白皮书:


希望这有助于……

谢谢您的回答。我会考虑你的建议。我认为
parallelism
参数决定了有多少进程用于刷新物化视图-例如3个mviews和
parallelism=3
,因此每个mview都在一个进程中刷新(参数parallelism的定义)。我的猜测是,这与最初创建为并行的mview无关。如果我错了,请纠正我;)你看过白皮书了吗?如果视图不是以并行方式创建的,或者在创建后没有更改为并行方式,那么指定并行方式将不会起任何作用。如果指定了并行提示,并且给定的MV已启用并行,则并行提示将生成并行执行进程以并行刷新MV。它不确定并发构建了多少mv。执行DBMS_MVIEW.REFRESH一次刷新一个MV。每个单独的MV可以通过多个并行执行从机并行刷新。希望这是清楚的。好吧,我又仔细研究了白皮书。不幸的是,我通过数据库链接访问多个表,而这些数据库链接我没有直接访问权限,因此我无法更改它们以进行并行执行。再次感谢您的努力。在基础SQL本身中使用并行提示(例如,从my_table选项卡中选择/*+parallel(选项卡,8)*/)。应在此处指定驾驶台(如果使用别名)。