我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Oracle执行计划中 并行和BUFFER SORT的问题

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Oracle执行计划中 并行和BUFFER SORT的问题

   近日开发说某个系统上有个sql执行时间忽快忽慢,让我帮忙看下,此sql是4个表(2个千万,2个十万)进行inner join操作,最后进行count(*)聚合操作,执行时间1--10S不等。查看执行计划发现使用了PX并行和BUFFER SORT操作,难怪忽快忽慢的,但是sql并没有显式加parallel,参数parallel_server也没有启用,这个并行和BUFFER SORT是从那来的呢?


下面通过实验来重现上面的情况:

1. PX并行和BUFFER SORT:

select e.ename, d.dname

  from scott.emp e, scott.dept d,scott.emp m

 where e.deptno = d.deptno

   and d.deptno = m.deptno

   and e.deptno = 10;


Execution plan:

----------------------------------------------------------------------------

| Id  | Operation                  | Name     |    TQ  |IN-OUT| PQ Distrib |

----------------------------------------------------------------------------

|   0 | SELECT STATEMENT           |          |        |      |            |

|   1 |  PX COORDINATOR            |          |        |      |            |

|   2 |   PX SEND QC (RANDOM)      | :TQ10003 |  Q1,03 | P->S | QC (RAND)  |

|*  3 |    HASH JOIN BUFFERED      |          |  Q1,03 | PCWP |            |

|   4 |     PX RECEIVE             |          |  Q1,03 | PCWP |            |

|   5 |      PX SEND BROADCAST     | :TQ10001 |  Q1,01 | S->P | BROADCAST  |

|   6 |       PX SELECTOR          |          |  Q1,01 | SCWC |            |

|   7 |        TABLE ACCESS FULL   | EMP      |  Q1,01 | SCWP |            |

|*  8 |     HASH JOIN              |          |  Q1,03 | PCWP |            |

|   9 |      JOIN FILTER CREATE    | :BF0000  |  Q1,03 | PCWP |            |

|  10 |       BUFFER SORT          |          |  Q1,03 | PCWC |            |

|  11 |        PX RECEIVE          |          |  Q1,03 | PCWP |            |

|  12 |         PX SEND HYBRID HASH| :TQ10000 |        | S->P | HYBRID HASH|

|* 13 |          TABLE ACCESS FULL | DEPT     |        |      |            |

|  14 |      PX RECEIVE            |          |  Q1,03 | PCWP |            |

|  15 |       PX SEND HYBRID HASH  | :TQ10002 |  Q1,02 | P->P | HYBRID HASH|

|  16 |        JOIN FILTER USE     | :BF0000  |  Q1,02 | PCWP |            |

|  17 |         PX BLOCK ITERATOR  |          |  Q1,02 | PCWC |            |

|* 18 |          TABLE ACCESS FULL | EMP      |  Q1,02 | PCWP |            |

----------------------------------------------------------------------------


2. BUFFER SORT(积卡尔积会产生这个):

select e.ename, d.dname

  from scott.emp e, scott.dept d;


Execution plan:

----------------------------------------------------------------------------------

| Id  | Operation              | Name        | Rows  | Bytes |Cost (%CPU)| Time  |

----------------------------------------------------------------------------------

|   0 | SELECT STATEMENT       |             |      |       |11 (100)|          |

|   1 |  MERGE JOIN CARTESIAN  |             |  95  | 57780 |11   (0)| 00:00:01 |

|   2 |   TABLE ACCESS FULL    | DEPT        |    5 |   324 | 2   (0)| 00:00:01 |

|   3 |   BUFFER SORT          |             |   19 |   856 | 9   (0)| 00:00:01 |

|   4 |    INDEX FAST FULL SCAN| PK_EMP      |   19 |   856 | 0   (0)|          |

----------------------------------------------------------------------------------


查看Oracle的解释:

   The BUFFER SORT operation indicates that the database is copying the data blocks obtained by the scan of pk_emp from the SGA to the PGA. This strategy avoids multiple scans of the same blocks in the database buffer cache, which would generate many logical reads and permit resource contention.


   最后的解决方法:给其中的2个小表加上rowid >= '0'的条件,让表通过index rowid扫描走hash join连接,稳定在1S内返回结果。


疑问:原sql的PX并行是如何来的,一直没有重现出。


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Oracle执行计划中 并行和BUFFER SORT的问题

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Oracle中如何分析执行计划和性能统计信息

在Oracle数据库中,可以通过以下几种方式来分析执行计划和性能统计信息:使用SQL语句explain plan来分析执行计划。可以在SQL语句前加上"explain plan for"关键字来生成该语句的执行计划。然后使用"select
Oracle中如何分析执行计划和性能统计信息
2024-04-09

编程热搜

目录