首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Oracle 19c & 12c创建索引并行提示

Oracle 19c & 12c创建索引并行提示
EN

Stack Overflow用户
提问于 2020-12-19 02:54:06
回答 1查看 3.8K关注 0票数 0

创建索引时,PARALLEL提示的行为似乎不像19c和12c预期的那样运行。

在所有19c的情况下,提示是Unused,但在其中两种情况下,说明实际上使用了automatic DOP,而在这些情况下,它实际上是并行处理的。

代码语言:javascript
运行
复制
Hint                       DOP  NOTE
-------------------------  ---  ---------------------------------------------------------------------------
/*+ PARALLEL (16) */         1
/*+ PARALLEL (4) */          1
/*+ PARALLEL */             16  automatic DOP: Computed Degree of Parallelism is 16 because of degree limit
/*+ PARALLEL (AUTO) */      16  automatic DOP: Computed Degree of Parallelism is 16 because of degree limit
/*+ PARALLEL (DEFAULT) */    1
/*+ PARALLEL (MANUAL) */     1

来自Oracle 19c VLDB和分区指南-控制自动并行度:

“手动此设置禁用Auto,...With用于PARALLEL_DEGREE_POLICY的默认手动设置,系统仅在在对象上显式设置DOP或在SQL语句中指定并行提示时才使用并行执行。所使用的DOP正是所指定的。”

在创建此索引的表上没有显式设置DOP。

使用具有下列初始化参数的Oracle 19c。

代码语言:javascript
运行
复制
set serveroutput on;
show parameters parallel;
---------------------------------------------------
awr_pdb_max_parallel_slaves          integer  10
containers_parallel_degree           integer  65535
fast_start_parallel_rollback         string   LOW
max_datapump_parallel_per_job        string   50
optimizer_ignore_parallel_hints      boolean  FALSE
parallel_adaptive_multi_user         boolean  FALSE
parallel_degree_limit                string   CPU
parallel_degree_policy               string   MANUAL
parallel_execution_message_size      integer  16384
parallel_force_local                 boolean  FALSE
parallel_instance_group              string  
parallel_max_servers                 integer  320
parallel_min_degree                  string   1
parallel_min_percent                 integer  0
parallel_min_servers                 integer  32
parallel_min_time_threshold          string   AUTO
parallel_servers_target              integer  128
parallel_threads_per_cpu             integer  2
recovery_parallelism                 integer  0
...
show parameters cpu_count;
show parameters parallel_threads_per_cpu;
---------------------------------------------------
cpu_count                            integer  8
parallel_threads_per_cpu             integer  2

索引的形式如下:

代码语言:javascript
运行
复制
CREATE /*+ [PARALLEL HINT] */ INDEX OWN.IX ON
OWN.T (some_char, some_number, some_date1, some_date2)
LOCAL NOLOGGING TABLESPACE INDX COMPRESS

我的会话是唯一的活动会话,结果是可重复的,这表明系统负载不是一个因素。如果需要的话,我已经解释了计划,但是这个帖子已经足够长了。

我尝试在Oracle 12c中执行类似的任务(但索引不是本地的,底层表也没有分区),结果和初始化参数如下。

代码语言:javascript
运行
复制
Hint                       DOP   Note
-------------------------  ----- --------------------------------------------------------------------------------
/*+ PARALLEL (16) */       16/32 Degree of Parallelism is 16 because of hint
/*+ PARALLEL (4) */          4/8 Degree of Parallelism is 4 because of hint
/*+ PARALLEL */              2/4 automatic DOP: Computed Degree of Parallelism is 2
/*+ PARALLEL (AUTO) */         1 automatic DOP: Computed Degree of Parallelism is 1 because of parallel threshold
/*+ PARALLEL (DEFAULT) */      1
/*+ PARALLEL (MANUAL) */       1

使用具有下列初始化参数的Oracle 12c。

代码语言:javascript
运行
复制
show parameters parallel;
------------------------------------------------------
fast_start_parallel_rollback         string   LOW
parallel_adaptive_multi_user         boolean  TRUE
parallel_automatic_tuning            boolean  FALSE
parallel_degree_level                integer  100
parallel_degree_limit                string   CPU
parallel_degree_policy               string   MANUAL
parallel_execution_message_size      integer  16384
parallel_force_local                 boolean  FALSE
parallel_instance_group              string  
parallel_io_cap_enabled              boolean  FALSE
parallel_max_servers                 integer  320
parallel_min_percent                 integer  0
parallel_min_servers                 integer  32
parallel_min_time_threshold          string   AUTO
parallel_server                      boolean  FALSE
parallel_server_instances            integer  1
parallel_servers_target              integer  128
parallel_threads_per_cpu             integer  2
recovery_parallelism                 integer  0
...
show parameters cpu_count;
show parameters parallel_threads_per_cpu;
------------------------------------------------------
cpu_count                            integer  8
parallel_threads_per_cpu             integer  2

In 19c:

  1. 为什么上面列出的与/*+ PARALLEL (16) *//*+ PARALLEL (4) *//*+ PARALLEL (DEFAULT) */案例并行提示的DOP 1?预期16、4和16 (=8*2),respectively.

  1. 对于这两种情况,当DOP为16时,为什么解释计划说当汽车DOP计算出DOP >1时,提示是Unused

In 12c

  1. 为什么DOP 1与/*+ PARALLEL (DEFAULT) */并行提示?预期16 (=8*2).

19c诉12c

  1. 为什么19c不产生双倍的并行执行服务器的DOP,就像在12c中那样?(在12c中,当自动DOP为4时,我们得到8台并行执行服务器,当DOP为16时,得到32,.,但在19c中没有发生这种情况。)
EN

回答 1

Stack Overflow用户

发布于 2021-03-15 12:53:14

在Oracle12c中,引入了并行dml、ENABLE_PARALLEL_DML

它可以直接在dml sql语句中使用。

/*+并行(16) enable_parallel_dml */

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65366242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档