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

Oracle Plan_Table和 'TQ',IN-out '和 'PQ Distrib' 信息

ASKTOM 2019-09-25
406

问题描述

嗨,汤姆,

我有一个正在使用并行处理的查询。

当我查看explain计划时,它不会向我显示 “tq”,“IN-out” 和 “pq distrib” 信息。我查看Plan_table没有诸如 'TQ',IN-out '和 'PQ Distrib' 之类的列。

但是,当我将DBMS_XPLAN.DISPLAY用于同一查询时,它确实会为explain计划显示 'TQ','in-OUT' 和 'PQ Distrib' 信息。

我的问题是,当这些列在Plan_Table中不存在时,DBMS_XPLAN.DISPLAY从哪里构建此信息以显示在explain计划中?

我已经检查了V $ SQL_PLAN和V $ SQL_PLAN_STATISTICS_ALL视图,但没有找到 'TQ','IN-out' 和 'PQ Distrib' 列。

提前感谢您的帮助。

问候,

拉维S

专家解答

在调用它时添加并行格式以获取这些列:

create table t as 
  select level c1 from dual
  connect by level <= 100;

set serveroutput off
explain plan for 
select /*+ parallel */count (*) from t;

select *
from   table(dbms_xplan.display(null, null, '+PARALLEL'));

--------------------------------------------------------------------------------------------------------    
| Id  | Operation              | Name     | Rows  | Cost (%CPU)| Time     |    TQ  |IN-OUT| PQ Distrib |    
--------------------------------------------------------------------------------------------------------    
|   0 | SELECT STATEMENT       |          |     1 |     2   (0)| 00:00:01 |        |      |            |    
|   1 |  SORT AGGREGATE        |          |     1 |            |          |        |      |            |    
|   2 |   PX COORDINATOR       |          |       |            |          |        |      |            |    
|   3 |    PX SEND QC (RANDOM) | :TQ10000 |     1 |            |          |  Q1,00 | P->S | QC (RAND)  |    
|   4 |     SORT AGGREGATE     |          |     1 |            |          |  Q1,00 | PCWP |            |    
|   5 |      PX BLOCK ITERATOR |          |   100 |     2   (0)| 00:00:01 |  Q1,00 | PCWC |            |    
|   6 |       TABLE ACCESS FULL| T        |   100 |     2   (0)| 00:00:01 |  Q1,00 | PCWP |            |    
--------------------------------------------------------------------------------------------------------
复制


如果你得到了display_cursor的执行计划 (这是你想要的,真的),那么当并行运行时,无论如何你应该得到这些:

select /*+ parallel gather_plan_statistics */count (*) from t;

select *
from   table(dbms_xplan.display_cursor(null, null, 'ALLSTATS ALL'));

-----------------------------------------------------------------------------------------------------------------------------------------------------------    
| Id  | Operation              | Name     | Starts | E-Rows | Cost (%CPU)| E-Time   |    TQ  |IN-OUT| PQ Distrib | A-Rows |   A-Time   | Buffers | Reads  |    
-----------------------------------------------------------------------------------------------------------------------------------------------------------    
|   0 | SELECT STATEMENT       |          |      1 |        |     2 (100)|          |        |      |            |      1 |00:00:00.01 |       3 |      0 |    
|   1 |  SORT AGGREGATE        |          |      1 |      1 |            |          |        |      |            |      1 |00:00:00.01 |       3 |      0 |    
|   2 |   PX COORDINATOR       |          |      1 |        |            |          |        |      |            |      2 |00:00:00.01 |       3 |      0 |    
|   3 |    PX SEND QC (RANDOM) | :TQ10000 |      0 |      1 |            |          |  Q1,00 | P->S | QC (RAND)  |      0 |00:00:00.01 |       0 |      0 |    
|   4 |     SORT AGGREGATE     |          |      2 |      1 |            |          |  Q1,00 | PCWP |            |      2 |00:00:00.01 |       2 |      5 |    
|   5 |      PX BLOCK ITERATOR |          |      2 |    100 |     2   (0)| 00:00:01 |  Q1,00 | PCWC |            |    100 |00:00:00.01 |       2 |      5 |    
|*  6 |       TABLE ACCESS FULL| T        |      1 |    100 |     2   (0)| 00:00:01 |  Q1,00 | PCWP |            |    100 |00:00:00.01 |       2 |      5 |    
-----------------------------------------------------------------------------------------------------------------------------------------------------------    
复制


在v $ 视图中没有针对这些的特定列,它在other_tag中:

select operation, other_tag
from   v$sql_plan_statistics_all
where  plan_hash_value = '3126468333';

OPERATION           OTHER_TAG                       
SELECT STATEMENT                               
SORT                                           
PX COORDINATOR                                 
PX SEND             PARALLEL_TO_SERIAL               
SORT                PARALLEL_COMBINED_WITH_PARENT    
PX BLOCK            PARALLEL_COMBINED_WITH_CHILD     
TABLE ACCESS        PARALLEL_COMBINED_WITH_PARENT   
复制

文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论