zoukankan      html  css  js  c++  java
  • oracle执行计划(二)

    一.oralce查看执行计划

    Pl/sql 工具

    1.直接File->New->Explain Plan Window,在窗口中执行sql可以查看计划结果。其中,Cost表示cpu的消耗,单位为n%,Cardinality表示执行的行数,等价Rows。

    2.先执行EXPLAIN PLAN FOR select * from emp e ,dept d where e.deptno=d.deptno,然后再执行select * from table(DBMS_XPLAN.DISPLAY),就可以看到执 行计划了。

    3.Sqlplus 中首先 set trace on,然后执行sql语句就会出现执行计划。

       SQL>SET TIMING ON             --控制显示执行时间统计数据 
       SQL>SET AUTOTRACE ON EXPLAIN       --这样设置包含执行计划、脚本数据输出,没有统计信息 
       SQL>执行需要查看执行计划的SQL语句 
       SQL>SET AUTOTRACE OFF           --不生成AUTOTRACE报告,这是缺省模式 
       SQL> SET AUTOTRACE ON           --这样设置包含执行计划、统计信息、以及脚本数据输出 
       SQL>执行需要查看执行计划的SQL语句 
       SQL>SET AUTOTRACE OFF 
        SQL> SET AUTOTRACE TRACEONLY      --这样设置会有执行计划、统计信息,不会有脚本数据输出 
        SQL>执行需要查看执行计划的SQL语句 
        SQL>SET AUTOTRACE TRACEONLY STAT --这样设置只包含有统计信息 
        SQL>执行需要查看执行计划的SQL语句 

    二.如何看执行计划

     执行顺序的原则是:由上至下,从右向左 

    由上至下:在执行计划中一般含有多个节点,相同级别(或并列)的节点,靠上的优先执行,靠下的后执行 

    从右向左:在某个节点下还存在多个子节点,先从最靠右的子节点开始执行。 

    三.执行计划中字段解释

    recursive calls  递归调用 
    db block gets  从buffer cache中读取的block的数量。

          这块意思就是在操作中正好提取的块数目,而不是在一致性读的情况下而产生的正常情况下,一个查询提取的块是在查询查询开始的那个时间点上存在的数据库,当前块是在这个时候存在数据块,而不是这个时间点之前或者之后的的数据块数目。 
    consistent gets  从buffer cache中读取的undo数据的block的数量,

            在回滚段Buffer中的数据一致性读所需要的数据块,,这里的概念是在你处理你这个操作的时侯需要在一致性读状态上处理多个块,这些块产生的主要原因是因为你在查询过程中,由于其它会话对数据 块进行操作,而对所要查询的块有了修改,但是由于我们的查询是在这些修改之前调用的,所要需要对回滚 段中的数据块的前映像进行查询,以保证数据的一致性。这样就产生了一致性读。 

    physical reads 物理读 就是从磁盘上读取数据块的数量。其产生的主要原因是: 
             1:在数据库高速缓存中不存在这些块。 
             2:全表扫描 
             3:磁盘排序 
    redo size    DML生成的redo的大小 
    sorts (memory)  在内存执行的排序量 
    sorts (disk)    在磁盘执行的排序量 
    2091 bytes sent via SQL*Net to client    从SQL*Net向客户端发送了2091字节的数据 
    416 bytes received via SQL*Net from client 客户端向SQL*Net发送了416字节的数据。

    四.具体内容查看 

    1> Plan hash Value 
    这一行是这一条语句的的hash值,我们知道ORACLE对每一条ORACLE语句产生的执行计划放在SHARE POOL里面,第一次要经过硬解析,产生hash值。下次再执行时比较hash值,如果相同就不会执行硬解析。 
    2> COST 
    COST没有单位,是一个相对值,是SQL以CBO方式解析执行计划时,供ORACLE来评估CBO成本,选择执行计划用的。没有明确的含义,但是在对比是就非常有用。 
    公式:COST=(Single Block I/O COST + MultiBlock I/O Cost + CPU Cost)/ Sreadtim 
    Operation:当前操作的内容。 
    Name:操作对象 
    Rows:也就是10g版本以前的Cardinality(基数),Oracle估计当前操作的返回结果集行数。 
    Bytes:表示执行该步骤后返回的字节数。 
    Cost(CPU):表示执行到该步骤的一个执行成本,用于说明SQL执行的代价。 
    Time:Oracle 估计当前操作的时间。 
    3.谓词说明: 
    Predicate Information (identified by operation id): 
    --------------------------------------------------- 
    2 - filter("B"."MGR" IS NOT NULL) 
    4 - access("A"."EMPNO" = "B"."MGR") 
      Access: 表示这个谓词条件的值将会影响数据的访问路劲(全表扫描还是索引)。 
      Filter:表示谓词条件的值不会影响数据的访问路劲,只起过滤的作用。 
         谓词中主要注意access,要考虑谓词的条件,使用的访问路径是否正确。 
    4. 动态分析 
    如果在执行计划中有如下提示: 
    Note 
    ------------ 
    -dynamic sampling used for the statement 
    这提示用户CBO当前使用的技术,需要用户在分析计划时考虑到这些因素。 当出现这个提示,说明当前表使用了动态采样。我们从而推断这个表可能没有做过分析。 
    这里会出现两种情况: 
    (1) 如果表没有做过分析,那么CBO可以通过动态采样的方式来获取分析数据,也可以或者正确的执行计划。 
    (2) 如果表分析过,但是分析信息过旧,这时CBO就不会在使用动态采样,而是使用这些旧的分析数据,从而可能导致错误的执行计划。 

  • 相关阅读:
    Shapelib库编译
    CheckedComboBoxEdit实现单选
    VS2019卡在创建Windows恢复点
    ArcGIS Add-In 创建自定义菜单
    使用DevExpress展示地图—加载SHP
    未能从程序集ESRI.ArcGIS.AddIns.SDK加载任务"ValidateAddInXMLTask"
    没有为该对象定义无参数的构造函数
    RichEditControl自定义高亮语法
    Java解析Word模版,替换${}的值
    64.QT-单播、广播、组播
  • 原文地址:https://www.cnblogs.com/wujin/p/3075250.html
Copyright © 2011-2022 走看看