Oracle执行计划的查看

前言

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

执行计划的清除

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

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

[[email protected] ~]$ 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的执行计划及统计信息。这些内容比较简单,没有什么深奥的原理,写此博文是为了方便记忆,为将来做个备忘。

 

时间: 2024-10-08 11:13:07

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

Oracle执行计划

Oracle执行计划 最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也来总结一下自己最近所学,不定时更新ing- 一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述 二:怎样查看Oracle执行计划? 因为我一直用的PLSQL远程连接的公司数据库,所以这里以PLSQL为例: ①:配置执行计划需要显示的项: 工具  ->  首选项 ->   窗口类型  ->  计划窗口  ->  根据需要配置要显示在执行计划中的列

Oracle 执行计划(Explain Plan)

执行计划:一条查询语句在ORACLE中的执行过程或访问路径的描述.即就是对一个查询任务,做出一份怎样去完成任务的详细方案. 如果要分析某条SQL的性能问题,通常我们要先看SQL的执行计划,看看SQL的每一步执行是否存在问题. 看懂执行计划也就成了SQL优化的先决条件. 通过执行计划定位性能问题,定位后就通过建立索引.修改sql等解决问题. 一.执行计划的查看 1.1 设置autotrace autotrace命令如下 序号 命令 解释 1 SET AUTOTRACE OFF 此为默认值,即关闭A

Oracle执行计划突变诊断之统计信息收集问题

Oracle执行计划突变诊断之统计信息收集问题 1.  情形描述 DB version:11.2.0.4 WITH SQL1 AS  (SELECT LAC,          CI,          TO_NUMBER(C.LONGITUDE) LONGITUDE,          TO_NUMBER(C.LATITUDE) LATITUDE     FROM MB_SYS_CELL_INFO C    WHERE C.CONTY_NAME = '道孚县'), SQL2 AS  (SELE

[转]看懂Oracle执行计划

原文地址:https://www.cnblogs.com/Dreamer-1/p/6076440.html 一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述 二:怎样查看Oracle执行计划? 因为我一直用的PLSQL远程连接的公司数据库,所以这里以PLSQL为例: ①:配置执行计划需要显示的项: 工具  ->  首选项 ->   窗口类型  ->  计划窗口  ->  根据需要配置要显示在执行计划中的列 执行计划的常用列字段解释:

Oracle执行计划总结

一.ORACLE中常见执行计划 表访问的执行计划 1.table access full:全表扫描.它会访问表中的每一条记录. 2.table access by user rowid:输入源rowid来自于用户指定. 3.table access by index rowid:输入源rowid来自于索引. 4.table access by global index rowid:全局索引获取rowid,然后再回表. 5.table access by local index rowid:分区索

Oracle执行计划详解

 简介: 本文全面详细介绍oracle执行计划的相关的概念,访问数据的存取方法,表之间的连接等内容. 并有总结和概述,便于理解与记忆! +++ 目录 --- 一.相关的概念 Rowid的概念 Recursive Sql概念 Predicate(谓词) DRiving Table(驱动表) Probed Table(被探查表) 组合索引(concatenated index) 可选择性(selectivity) 二.oracle访问数据的存取方法 1) 全表扫描(Full Table Scan

ORACLE 执行计划

有关oracle 执行计划几个不错的连接 执行计划的一些概念介绍:http://database.51cto.com/art/200611/34273.htm执行计划的例子:http://www.oracleblog.org/working-case/why-not-take-hash-join/执行计划的学习:http://wenku.baidu.com/view/aa01ba09581b6bd97f19eae9.html

如何看懂ORACLE执行计划

如何看懂Oracle执行计划 一.什么是执行计划 An explain plan is a representation of the access path that is taken when a query is executed within Oracle. 二.如何访问数据 At the physical level Oracle reads blocks of data. The smallest amount of data read is a single Oracle bloc

Oracle执行计划并取得数据行

一个执行计划就是告诉Oracle对于每一个表对象使用哪种访问方法以及什么联接和联接顺序来将多个表联接到一起的一系列命令.执行计划中的每个步骤产生一个行源,然后与另外一个行源相联接,直到所有对象都被访问和联接. Oracle中的查询计划将会完成解析,绑定,执行和提取的步骤. Oracle每次访问数据块的时候,Oracle都会从该块中取出数据行然后在一次回路中返回给客户端.一次返回的行数是一个可配置的值称为列大小.列大小是一个网络回路中一次可以传输的可能行数.而列大小的设置可以是通过编程改变.在SQ