Oracle 在 table 和索引上的并行度

Degree of parallelism in Oracle on a table and index

我们有一个 RAC 设置有 4 个节点,其中某些 table 的度数为 1,实例为 1,table 上的索引之一的 DOP 为 16,实例为 1。只是想知道 table 和索引是否有相同 DOP 的限制?如果不是这种情况,那么它如何影响数据库。

Table和索引并行度(DOP)是独立的。

在 table 访问(例如 FULL TABLE SCAN)的情况下,table DOP 用作默认值。一些索引访问路径可以并行化,对于那些默认使用索引 DOP。

如果您创建 并使用并行选项建立索引,通常会出现这种情况。为创建的索引存储使用过的 DOP。 (也许您只需要在创建后 将索引 DOP 更改为 NOPARALLEL

这里有一个小例子,在并行模式下创建一个索引,然后重新设置 DOP:

create index idx on t1(id) parallel 4;

select DEGREE, INSTANCES from user_indexes where index_name = 'IDX';

DEGREE                                   INSTANCES                              
---------------------------------------- ----------------------------------------
4                                        1                                      

alter index idx noparallel;

select DEGREE, INSTANCES from user_indexes where index_name = 'IDX';

DEGREE                                   INSTANCES                              
---------------------------------------- ----------------------------------------
1                                        1    

一般来说,您应该小心使用基于对象的默认 DOP,因为它对 所有 查询都有效。使用 PARALLEL Hint 为每个查询定义显式 DOP 可能更灵活。

我自己检查过,没有这样的限制,即索引及其关联的 table 应该具有相同的 DOP。它影响数据库的唯一方式是由于并行进程对服务器造成额外负载。