我提前道歉,因为我是这个领域的新手,我可能没有预先提供所有必需的信息,但在这里。

  • 我在一个两节点的 Oracle RAC 上。
  • 优化器统计数据最近被收集并且非常准确。
  • 我有一个查询,其中引用了 3 个表。 (表 A 左外连接 X 上的表 B 左外连接 Z 上的表 C。)
  • 表 B 和 C 已分区。
  • 所有三个表的度数都是 1。
  • select index_name from dba_indexes where degree != 1 and index_name not like 'SYS%' 不返回任何行。 (因此索引的度数为 1)。
  • 我设置了以下参数:

  • .
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    optimizer_dynamic_sampling           integer     2
    optimizer_features_enable            string      11.2.0.3
    optimizer_index_caching              integer     0
    optimizer_index_cost_adj             integer     100
    optimizer_mode                       string      ALL_ROWS
    optimizer_secure_view_merging        boolean     TRUE
    optimizer_use_invisible_indexes      boolean     FALSE
    optimizer_use_pending_statistics     boolean     FALSE
    optimizer_use_sql_plan_baselines     boolean     TRUE
    os_authent_prefix                    string
    os_roles                             boolean     FALSE
    
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    parallel_adaptive_multi_user         boolean     FALSE
    parallel_automatic_tuning            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_io_cap_enabled              boolean     FALSE
    parallel_max_servers                 integer     960
    parallel_min_percent                 integer     0
    parallel_min_servers                 integer     0
    


  • 表和索引的所有度数设置为 1
  • parallel_degree_policy 设置为 MANUAL
  • 查询时未提供任何提示

  • 在运行解释计划时,我的自动 DOP:计算并行度计算为 3 的可能原因是什么?

    最佳答案

    查看我的回答 here 以获取可能影响并行度的 38 个因素的列表。

    但幸运的是,这些项目中的大多数只会降低 DOP,没有很多方法可以意外提高 DOP。

    根据您提供的信息,我认为只有两个可能的项目可能导致并行性:

  • alter session force parallel (query|dml|ddl); 使用此查询来检查 session 级力: select * from v$session where pq_status = 'FORCED' or pdml_status = 'FORCED' or pddl_status = 'FORCED';
  • 计划管理,用提示查询 secret 替换您的查询。可能存在添加并行提示的配置文件、大纲、SQL 计划管理或高级重写。使用 explain plan for ...select * from table(dbms_xplan.display); 检查解释计划。备注部分可能会告诉您是否使用了这些选项之一。
  • 关于sql - Oracle自动并行度的原因?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21043398/

    10-15 23:47