暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 并行提示未在SELECT中使用

askTom 2017-10-26
189

问题描述

嗨,

我有一个在存储过程中编写的SQL:
选择/* 并行 (TB_TEST,8)/
从TB_TEST
其中DT <= TO_DATE('01/01/2015','mm/DD/yyy');

当我执行过程并监视v $ session时,我只能看到一个具有SQL_ID的会话属于上述SQL。

你能帮忙理解一下-
当我们使用parallel (8) 时,理想情况下,它应该在v $ sesion中显示8个条目,对吗?
我的DB CPU_COUNT是32。
您能帮助为什么它在我的情况下不并行执行吗?


专家解答

有 * 很多 * 可能的原因,你不并行运行,例如,这里列出的一些参数

https://asktom.oracle.com/pls/apex/asktom.search?tag=parallel-processing-200504

资源经理,
并行运行的其他会话
初始化参数,
优化器成本计算

都发挥作用。例如,这是针对一个小表的 “并行” 查询

SQL> select /*+ parallel */ count(*) from t;

Execution Plan
----------------------------------------------------------
Plan hash value: 1206915961

-------------------------------------------------------------------------
| Id  | Operation        | Name         | Rows  | Cost (%CPU)| Time     |
-------------------------------------------------------------------------
|   0 | SELECT STATEMENT |              |     1 |     0   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE  |              |     1 |            |          |
|   2 |   INDEX FULL SCAN| SYS_C0041841 |     1 |     0   (0)| 00:00:01 |
-------------------------------------------------------------------------

Note
-----
   - automatic DOP: Computed Degree of Parallelism is 1
复制


为什么?这是一个单行表,扫描它的最佳方法是通过索引... 因此没有执行并行操作。

没有参数 “db_cpu_count”,所以我假设你的意思是cpu_count?但是像我一样在自动跟踪下运行您的查询以获取更多信息。

之后,您可以查看设置并行查询跟踪,例如

alter会话集 “_ px_trace” = 高,全部;

这将编写一个跟踪文件,其中包含有关选择并行进程的决策的 (大量) 诊断信息。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论