iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Oracle执行计划中 并行和BUFFER SORT的问题
  • 306
分享到

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

2024-04-02 19:04:59 306人浏览 泡泡鱼
摘要

   近日开发说某个系统上有个sql执行时间忽快忽慢,让我帮忙看下,此sql是4个表(2个千万,2个十万)进行inner join操作,最后进行count(*)聚合操作,执行时间1--1

   近日开发说某个系统上有个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并行是如何来的,一直没有重现出。


您可能感兴趣的文档:

--结束END--

本文标题: Oracle执行计划中 并行和BUFFER SORT的问题

本文链接: https://www.lsjlt.com/news/41994.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • oracle sqlprofile 固定执行计划,并迁移执行计划
    sqlprofile固定执行计划 模拟10g 执行计划迁移至11g oracle数据库中,11g库用10g的执行计划,这里是把hint 全盘扫描的执行计划迁移  --1.准备阶段&nb...
    99+
    2024-04-02
  • 看懂Oracle中的执行计划
       从事Oracle相关的工作,从最初的一脸懵逼到现在的略有所知,也来总结一下自己最近学习关于Oracle中SQL语句的执行计划的相关内容。下面是文章的目录结构: ...
    99+
    2024-04-02
  • oracle中怎么查看sql执行计划的执行顺序
    这篇文章主要讲解了“oracle中怎么查看sql执行计划的执行顺序”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“oracle中怎么查看sql执行计划的执行顺...
    99+
    2024-04-02
  • Oracle中如何查看执行计划
    这篇文章主要介绍了Oracle中如何查看执行计划,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。方法一、通过使用工具PLSQL Develop...
    99+
    2024-04-02
  • oracle中怎么查看执行计划
    在Oracle中查看执行计划可以通过以下两种方法: 1、使用EXPLAIN PLAN语句来生成执行计划: EXPLAIN PLAN ...
    99+
    2024-03-13
    oracle
  • Oracle中怎么固定执行计划
    这篇文章给大家介绍Oracle中怎么固定执行计划,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1.1  BLOG文档结构图 1.2  前言部分1.2.1 ...
    99+
    2024-04-02
  • 怎么进行Oracle 执行计划的说明
    这期内容当中小编将会给大家带来有关怎么进行Oracle 执行计划的说明,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。如果要分析某条SQL的性...
    99+
    2024-04-02
  • Oracle中怎么获取SQL执行计划
    这篇文章将为大家详细讲解有关Oracle中怎么获取SQL执行计划,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Oracle 获取SQL执行计划方法方法一:D...
    99+
    2024-04-02
  • oracle执行计划的方法是什么
    本篇内容主要讲解“oracle执行计划的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“oracle执行计划的方法是什么”吧!先从最开头一直往右看,直到...
    99+
    2024-04-02
  • Oracle中怎么查看执行计划的命令
    今天就跟大家聊聊有关Oracle中怎么查看执行计划的命令,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在SQL*PLUS(PL/SQL的命令窗口和S...
    99+
    2024-04-02
  • oracle中查看执行计划的常用方法
    本篇内容介绍了“oracle中查看执行计划的常用方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!本文介绍...
    99+
    2024-04-02
  • Oracle中如何分析执行计划和性能统计信息
    在Oracle数据库中,可以通过以下几种方式来分析执行计划和性能统计信息: 使用SQL语句explain plan来分析执行计划...
    99+
    2024-04-09
    Oracle
  • Oracle执行计划中常见index访问方式有哪些
    小编给大家分享一下Oracle执行计划中常见index访问方式有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧![SQL]SELECT COUNT(*)  FROM F...
    99+
    2024-04-02
  • MySQL中Explain执行计划的案例
    这篇文章给大家分享的是有关MySQL中Explain执行计划的案例的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。1. Explain 简述Explain 语句可以查看 MySQL...
    99+
    2024-04-02
  • 在Oracle中,如何得到真实的执行计划?
    <h2 color:#000000;font-size:16px;margin:0px;padding:0px;white-space:normal;background-color:#ffffff;...
    99+
    2024-04-02
  • oracle中如何查看SQL的执行计划方法
    这篇文章主要介绍了oracle中如何查看SQL的执行计划方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Oracle查看SQL执行计划的方...
    99+
    2024-04-02
  • 什么是SQLServer中的执行计划
    SQL Server中的执行计划是指数据库管理系统在执行SQL查询时生成的用于优化和执行查询的计划。执行计划是一个由数据库引擎生成的...
    99+
    2024-04-02
  • Oracle里的常见执行计划有哪些
    小编给大家分享一下Oracle里的常见执行计划有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!与表访问相关的执行计划Orac...
    99+
    2024-04-02
  • 解决宝塔计划任务不执行问题,BT宝塔面板计划任务不执行了怎么办?
    首先记住一点 目前BT宝塔计划任务有BUG 就是设置任务时候 必须一次性将执行周期,保存次数,保存路径设置好,一旦设置好了 就不能动否则只能删除重新建立, 因为修改后的 还是按照首次设置的执行,这就让我们有错觉 好像任务都很久了也不执行 例...
    99+
    2023-09-18
    ssh 服务器 linux
  • MySQL 中,EXPLAIN执行计划的type含义
    执行计划中的 type 字段表示 MySQL 在执行查询时使用的访问类型,也就是 MySQL 在访问表时使用的算法。 以下是 MySQL 中常见的 type 类型及其含义: system:这是最高级别的访问类型,表示 MySQL 只有一行...
    99+
    2023-10-23
    mysql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作