`
liwenshui322
  • 浏览: 511961 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle 获取执行计划

 
阅读更多

   一. 背景介绍

        当我们质疑一条SQL语句执行缓慢,进而尝试是否有改进可能性的时候。我们往往需要查看这条SQL语句对应的执行计划,那么在oracle中如何获取执行计划是本文要介绍的内容。

 

        二. 获取方法

        oracle提供四种获取执行计划的方法:

        1. 执行SQL语句explain plan,然后查询结果输出表(普遍方法)

        2. 查询一张动态性能视图

        3. 查询自动工作量库或者statspack表

        4. 启动提供执行计划的跟踪功能(比如启动sql_trace)

 

        三. SQL语句EXPLAIN PLAN(方法一)

        这个命令是以一条SQL语句作为输入,得到这条SQL的执行计划,并且将结果输出到计划表中。语法如下:

        explain plan for select count(*) from user_objects  /*解析获取执行计划*/

        select * from table (dbms_xplan.display) /*查询计划表显示执行计划*/

   

        如果查看的是绑定变量SQL的执行计划,SQL必须是变量的形式,比如:

        explain plan  for select * from emp where empno = :p_value.

        但是,存在一个问题,由于命令explain plan不能使用绑定变量窥测,也就是explain plan显示的执行计划,可能不是真正的执行计划。也就是说,如果使用了绑定变量,那么explain plan生成的执行计划是不可靠的(当然,这是针对绝对可靠而言,其实已经很可靠了)

        

        四. 查询动态性能视图获取执行计划(方法二)

         SQL语句被解析执行之后,会在共享池里面缓存着这条SQL语句的解析结果和执行计划,我们可以通过两个字段从动态性能视图里面查出执行计划。一个是sql_id(父游标,代表一条SQL的解析结果),一个是sql_child_number(SQL语句执行计划序号,一条SQL可能对应多个执行计划),这两个字段在视图v$session和V$sql里面都存在。如果我们想查看的是当前正在执行SQL的执行计划,可以通过如下SQL查出这两个字段:

  1. select a.SQL_ID, a.SQL_CHILD_NUMBER, b.SQL_TEXT  
  2.   from v$session a, v$sql b  
  3.  where a.SQL_ID = b.SQL_ID  
  4.    and a.USERNAME is not null  
  5.    and a.STATUS = 'ACTIVE'  

 

        如果你知道要查看那一条SQL语句的执行计划,可以直接查询V$sql视图,比如:

  1. select a.SQL_ID, a.CHILD_NUMBER  
  2.   from v$sql a  
  3.  where a.SQL_TEXT like '%cm_cost where pk_cost%'  

        查询到这两字段之后,直接通过一个dbms_xplan包的display_cursor函数就能查看这条SQL的执行计划,如下所示:

  1. select * from table(dbms_xplan.display_cursor('7ngvh44anxzx1', 0))  

        结果可能如下图所示:



 

  • 大小: 91.7 KB
0
0
分享到:
评论

相关推荐

    oracle获取执行计划全部方法

    最全的6种oracle执行计划的方法,通过这些方法获取sql执行计划,进行优化

    Oracle调优实战执行计划

    执行计划是指示Oracle如何获取和过滤数据、产生最终的结果集,是影响SQL语句执行性能的关键因素。在深入了解执行计划之前,首先需要知道执行计划是在什么时候产生的,以及如何让SQL引擎为语句生成执行计划。 先了解...

    Scala Lift开发的一个获得oracle执行计划的小项目

    Scala Lift开发的一个获得oracle执行计划的web项目,由用户在文本框输入sql语句,输出oracle执行计划,并会将用户操作记录保存在h2数据库中,方便用户对之前sql的查看和比较。 Lift框架的材料比较少,希望可以帮助到...

    读懂oracle sql执行计划

    sql 执行计划的如何产生,如何获取,如何解读,在这文档中可以看到答案

    oracle监听执行sql语句

    oracle监听执行,可以监听应用执行的sql语句

    获取SQL语句的执行计划v1

    获取 SQL 语句的执行计划 方法 1:使用 autotrace 查看执行计划 配置使用 autotrace 下面的例子为用户 scott 配置使用 autotrace。 创建角色 PLUSTRACE,并将角色授予用户 scott

    Oracle中获取执行计划的几种方法分析

    1. 预估执行计划 – Explain PlanExplain plan以SQL语句作为输入,得到这条SQL语句的执行计划,并将执行计划输出存储到计划表中。 首先,在你要执行的SQL语句前加explain plan for,此时将生成的执行计划存储到计划...

    oracle 查看当前会话执行的sql语句

    查询ORACLE 系统中当前会话正在执行的有关SQL语句。

    shell连接oracle数据库执行SQL工具脚本-支持select+inset+update

    根据配置文件获取数据库连接,根据传入sql执行sql 调用案例:dbConnectTest.sh "pssc_jk" "select sysdate from dual;" 参数介绍: "pssc_jk" 指配置文件中配置的数据库连接串 “SQL”要执行的SQL,可以是增删改...

    Oracle中使用DBMS_XPLAN处理执行计划详解

    DBMS_XPLAN是Oracle提供的一个用于查看SQL计划,包括执行计划和解释计划的包;在以前查看SQL执行计划的时候,我都是使用set autotrace命令,不过现在看来,DBMS_XPLAN包给出了更加简化的获取和显示计划的方式。 这5...

    oracle 获取 首拼 函数

    oracle数据库执行即可 select get_pinyin('XXXXX') FROM DUAL

    获取ORACLE信息的脚本

    一个获取全面数据库信息的脚本,用文本文件打开。在sqlplus下执行使用sys帐号。可以在当前目录下获得html文件大于8M之多

    查看Oracle的执行计划一句话命令

    您可能感兴趣的文章:ORACLE数据库查看执行计划的方法Oracle中获取执行计划的几种方法分析Oracle中使用DBMS_XPLAN处理执行计划详解Oracle中基于hint的3种执行计划控制方法详细介绍Oracle中直方图对执行计划的影响...

    MySQL导出数据并通过sqlldr导入oracle

    MySQL数据导入到Oracle的中间件,其工作原理是将MySQL数据的导出命令写入到d:/mysqltooracle/exportcmd.txt,打开该文件即可获取需要手动执行的导出MySQL数据的sql脚本,执行后会在 “/var/mysqltooracle”(针对...

    Oracle 高性能SQL引擎剖析:SQL优化与调优机制详解 (黄玮) 高清PDF扫描版

    重点讲解执行计划在sql语句执行的生命周期中所处的位置和作用,sql引擎如何生成执行计划以及如何获取sql语句的执行计划,如何从各种数据源显示和查看已经生成的执行计划。 第二篇“sql优化技术”深入分析oracle的...

    Oracle高性能SQL引擎剖析

    重点讲解执行计划在SQL语句执行的生命周期中所处的位置和作用,SQL引擎如何生成执行计划以及如何获取SQL语句的执行计划,如何从各种数据源显示和查看已经生成的执行计划。, 第二篇“SQL优化技术”深入分析Oracle的...

    Oracle中轻松取得建表和索引的DDL语句

    我们都知道在9i之前,要想获得建表和索引的语句是一件很麻烦的...在 Oracle 9i中,我们可以直接通过执行dbms_metadata从数据字典中查处DDL语句。使用这个功能强大的工具,我们可以获得单个对象或整个SCHEMA 的DDL语句。

    Oracle 高性能SQL引擎剖析:SQL优化与调优机制详解

    重点讲解执行计划在SQL语句执行的生命周期中所处的位置和作用,SQL引擎如何生成执行计划以及如何获取SQL语句的执行计划,如何从各种数据源显示和查看已经生成的执行计划。 第二篇“SQL优化技术”深入分析Oracle的SQL...

    Java操作Oracle数据库(建表,插数据,删除)

    Java操作Oracle数据库(建表,插数据,删除)

Global site tag (gtag.js) - Google Analytics