ORACLE执行计划的查看

前言

  一个系统在刚开始的时候,由于数据库中数据量不大,开发人员的主要精力都在业务与功能实现上。系统完成部署上线后随着时间的累积,每个表中的数据都在不断增长,我们往往会发现系统越来越慢,这可能是程序设计不合理,也可能是代码质量不高,也可能是业务流程问题,但是作为DBA或者负责数据库调优的工程师更应该想想是否是数据库方面的问题。数据库问题有很多种,作为开发人员主要关注SQL语句的合理性,至于数据库的其它问题可以暂时交给DBA去处理。对SQL语句调优,很重要的一点是查看SQL语句的执行计划。本文将简单介绍如何查看Oracle数据库中的执行计划。

执行计划的清除

  Oracle数据库的执行计划实际都存储在plan_table这张表中,也许已经有人做过查看执行计划的工作,那么plan_table中必然存在很多历史的执行计划。为了不影响之后的工作,最好能将之前的执行计划都删除。

  首先,我们先以sysdba账号通过sqlplus连接Oracle:

[oracle@ab23133 ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.5.0 - Production on Mon May 19 15:56:14 2014

Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

  然后删除plan_table这张表:

SQL> drop table plan_table;

Table dropped.

  最后退出sqlplus:

SQL> drop table plan_table;

Table dropped.

重新开启执行计划

  我们再次以sysdba账号通过sqlplus连接Oracle,开启执行计划的步骤如下:

  1、重新创建收集执行计划的表plan_table;

SQL> @?/rdbms/admin/utlxplan.sql;

Table created.

  2、创建plan_table这张表的别名,因为同义词可以节省大量的数据库空间,不同用户操作同一张表时不会有多少差别。

SQL> create public synonym plan_table  for plan_table;

Synonym created.

  3、给我们自己的账号myaccount授予plan_table表的所有权限; 

SQL> grant all on plan_table to myaccount;

Grant succeeded.

  4、创建plustrace角色;

SQL> @?/sqlplus/admin/plustrce.sql
SQL> create role plustrace;

Role created.

  5、将给角色添加访问以下视图的权限;

SQL> grant select on v_$sesstat to plustrace;

Grant succeeded.

SQL> grant select on v_$statname to plustrace;

Grant succeeded.

SQL> grant select on v_$mystat to plustrace;

Grant succeeded.

SQL> grant plustrace to dba with admin option;

Grant succeeded.

  6、设置不把输出的结果显示在屏幕上;

SQL> set echo off

  7、将plustrace角色授权给账号myaccount;

SQL> grant plustrace to myaccount;

Grant succeeded.

  8、使用账号myaccount连接Oracle;

SQL> conn myaccount/myaccount;
Connected.

  9、设置只查看执行计划的统计信息;

set autotrace traceonly statistics;

应用举例

  我们以下面的SQL为例,来查看其执行计划:

SQL> select * from t_recharge_info where recharge_sid='14051317413765487300000002';

Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
         23  consistent gets
          0  physical reads
          0  redo size
       2093  bytes sent via SQL*Net to client
        492  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed

从上面的SQL例子,我们看到输出了这条SQL的执行计划的统计信息,要设置查看执行计划,可以执行以下命令:

SQL> set autotrace on explain;

总结

  从Oracle执行计划的配置我们了解到,只需要跟着这些步骤就可以查看SQL的执行计划及统计信息。这些内容比较简单,没有什么深奥的原理,写此博文是为了方便记忆,为将来做个备忘。

后记:个人总结整理的《深入理解Spark:核心思想与源码分析》一书现在已经正式出版上市,目前京东、当当、天猫等网站均有销售,欢迎感兴趣的同学购买。

京东:http://item.jd.com/11846120.html
当当:http://product.dangdang.com/23838168.html

时间: 2024-08-06 08:19:18

ORACLE执行计划的查看的相关文章

查看oracle执行计划方法( 一)

关于oracle执行计划的概念,参考之前的博客:http://blog.csdn.net/cymm_liu/article/details/7996599 如果要分析某条SQL的性能问题,通常我们要先看SQL的执行计划,看看SQL的每一步执行是否存在问题. 如果一条SQL平时执行的好好的,却有一天突然性能很差,如果排除了系统资源和阻塞的原因,那么基本可以断定是执行计划出了问题. 看懂执行计划也就成了SQL优化的先决条件. 这里的SQL优化指的是SQL性能问题的定位,定位后就可以解决问题. 一. 

Oracle执行计划filter下多个节点的优化

Oracle执行计划filter下多个节点的优化 FILTER操作是执行计划中常见的操作,这种操作有两种情况:   l 只有一个子节点,那么就是简单过滤操作. l 有多个子节点,那么就是类似NESTED LOOPS操作,只不过与NESTED LOOPS差别在于,FILTER内部会构建HASH表,对于重复匹配的,不会再次进行循环查找,而是利用已有结果,提高效率.但是一旦重复匹配的较少,循环次数多,那么,FILTER操作将是严重影响性能的操作,可能你的SQL几天都执行不完了. 真题1.执行计划里的a

利用Oracle执行计划机制提高查询性能

oracle|性能|执行 消耗在准备利用Oracle执行计划机制提高查询性能新的SQL语句的时间是Oracle SQL语句执行时间的最重要的组成部分.但是通过理解Oracle内部产生执行计划的机制,你能够控制Oracle花费在评估连接顺序的时间数量,并且能在大体上提高查询性能. 准备执行SQL语句 当SQL语句进入Oracle的库缓存后,在该语句准备执行之前,将执行下列步骤: 1) 语法检查:检查SQL语句拼写是否正确和词序. 2) 语义分析:核实所有的与数据字典不一致的表和列的名字. 3) 轮

查看oracle执行计划方法( 二)

1.Cardinality(基数)/ rows Cardinality值表示CBO预期从一个行源(row source)返回的记录数,这个行源可能是一个表,一个索引,也可能是一个子查询.   在Oracle 9i中的执行计划中,Cardinality缩写成Card. 在10g中,Card值被rows替换.   这是9i的一个执行计划,我们可以看到关键字Card:        执行计划 -------------------------------------------------------

查看Oracle执行计划的几种常用方法-系列3

续上篇:http://blog.csdn.net/bisal/article/details/39225373 4. 10046事件 通过10046事件也可以查看目标SQL的执行计划.像10046这种事件,都不是Oracle官方文档中可以查询到的,这些事件一般用于调试目的,因此往往可以使用他们找到问题更详细的信息. 10046事件和之前的explain plan.DBMS_XPLAN包以及AUTOTRACE开关的区别在于,10046事件产生的trc文件中明确显示了目标SQL实际执行计划中每一步所

查看Oracle执行计划的几种常用方法-系列1

SQL的执行计划实际代表了目标SQL在Oracle数据库内部的具体执行步骤,作为调优,只有知道了优化器选择的执行计划是否为当前情形下最优的执行计划,才能够知道下一步往什么方向. 执行计划的定义:执行目标SQL的所有步骤的组合. 我们首先列出查看执行计划的一些常用方法: 1. explain plan命令 PL/SQL Developer中通过快捷键F5就可以查看目标SQL的执行计划了.但其实按下F5后,实际后台调用的就是explain plan命令,相当于封装了该命令. explain plan

如何查看Oracle执行计划

1)最简单的方法是,用PL/SQL 工具登录进去后,选中sql语句,然后按F5: 2)用PL/SQL工具登录进去后,打开command窗口 a) 执行:explain plan for select * from dual;--红色部分可替换为你的sql语句 b) 执行:select * from table(dbms_xplan.display()),即可获得执行计划; 3)用sqlplus命令登录,执行set autotrace traceonly;即可获得执行计划: 本栏目更多精彩内容:h

查看Oracle执行计划的几种常用方法-系列2

续上篇:http://blog.csdn.net/bisal/article/details/38919181 3. AUTOTRACE开关 SQLPLUS中打开AUTOTRACE开关可以得到SQL的执行计划. 从提示可以看到AUTOTRACE有几个选项: OFF/ON/TRACEONLY/EXPLAIN/STATISTICS. 实验: 1. 执行SET AUTOTRACE ON: 2. 执行SET AUTOTRACE TRACEONLY: 3. 执行SET AUTOTRACE TRACEONL

ORACLE执行计划的执行步骤

有了这些背景知识后就开始介绍执行计划.为了执行语句,Oracle可能必须实现许多步骤.这些步骤中的每一步可能是从数据库中物理检索数据行,或者用某种方法准备数据行,供发出语句的用户使用.Oracle用来执行语句的这些步骤的组合被称之为执行计划.执行计划是SQL优化中最为复杂也是最为关键的部分,只有知道了ORACLE在内部到底是如何执行该SQL语句后,我们才能知道优化器选择的执行计划是否为最优的.执行计划对于DBA来说,就象财务报表对于财务人员一样重要.所以我们面临的问题主要是:如何得到执行计划:如