前言

  一个系统在刚开始的时候,由于数据库中数据量不大,开发人员的主要精力都在业务与功能实现上。系统完成部署上线后随着时间的累积,每个表中的数据都在不断增长,我们往往会发现系统越来越慢,这可能是程序设计不合理,也可能是代码质量不高,也可能是业务流程问题,但是作为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. - Production on Mon May  :: 

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

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.5. - 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='';

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

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

SQL> set autotrace on explain;

总结

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

 

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

  1. Oracle 执行计划的查看方式

    访问数据的方法:一.访问表的方法:1.全表扫描,2.ROWID扫描                                二.访问索引的方法:1.索引唯一性扫描,2.索引范围扫描,3.索引全扫 ...

  2. 查看Oracle执行计划的几种方法

    查看Oracle执行计划的几种方法 一.通过PL/SQL Dev工具 1.直接File->New->Explain Plan Window,在窗口中执行sql可以查看计划结果.其中,Cos ...

  3. 看懂Oracle执行计划

    最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也来总结一下自己最近所学,不定时更新ing- 一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问 ...

  4. 【Oracle】【9】阅读oracle执行计划

    正文: 工具:PLSQL 1,配置执行计划需要显示的项 工具→首选项→窗口类型→计划窗口→根据需要配置要显示在执行计划中的列 2,打开执行计划 在SQL窗口执行完一条select语句后按 F5 即可查 ...

  5. Oracle执行计划 explain plan

    Rowid的概念:rowid是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统自己给加上的. 对每个表都有一个rowid的伪列,但是表中并不物理存储ROWID列的值.不过你可以像使用其它列那样 ...

  6. 转:Oracle 执行计划(Explain Plan) 说明

    Oracle 执行计划(Explain Plan) 说明 原贴地址:http://blog.csdn.net/tianlesoftware/article/details/5827245   如果要分 ...

  7. [转]看懂Oracle执行计划

    原文地址:https://www.cnblogs.com/Dreamer-1/p/6076440.html 一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问路径 ...

  8. 看懂Oracle执行计划、表连接方式

    看懂Oracle执行计划  原文:https://www.cnblogs.com/Dreamer-1/p/6076440.html 最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也 ...

  9. 使用Oracle执行计划分析SQL性能

    执行计划:一条查询语句在ORACLE中的执行过程或访问路径的描述.即就是对一个查询任务,做出一份怎样去完成任务的详细方案. 如果要分析某条SQL的性能问题,通常我们要先看SQL的执行计划,看看SQL的 ...

随机推荐

  1. csv文件乱码

    问题描述: 生成的csv文件,设置为UTF-8格式,在windows上用EXCEL打开的话会乱码,在linux上用vim或者cat打开查看正常:设置为GBK格式的话,在windows上用EXCEL打开 ...

  2. JS控制输入框,输入正确的价格

    在HTML中,验证输入内容的正确性是提高用户体验的一方面,同时也是初步保证了数据的来源的正确性. 下面是一个常用的控制输入正确的价格的JS代码 function clearNoNum(obj) { o ...

  3. Devexpress WPF教程

    [视频专辑]酷炫界面开发神器DevExpress WPF视频教程(36集全) http://www.devexpresscn.com/post/620.html

  4. 批判“await使用中的阻塞和并发”——对asyc/await这对基友的误会和更正

    写第一篇<await使用中的阻塞和并发>的时候还自信满满,觉得写的真不错,结果漏洞百出…… 更正第二篇<await使用中的阻塞和并发(二)>的时候觉得这回不会再错了…… 结果我 ...

  5. FIM控制同步用户

     C:\Program Files\Microsoft Office Servers\15.0\Synchronization Service\UIShell 这个路径下,你如果懂FIM,可以进去看看 ...

  6. 描述一下 cookies,sessionStorage 和 localStorage 的区别?

    sessionStorage 和 localStorage 是HTML5 Web Storage API 提供的,可以方便的在web请求之间保存数据.有了本地数据,就可以避免数据在浏览器和服务器间不必 ...

  7. python--变量,常量,用户交互

    1.变量 概念:把程序运行过程中产生的中间值保存在内存,方便后面使用 命名规范: 1.字母,数字,下划线组成 2.不能用数字开头,且不能用纯数字 3.不能用python关键字 4.不要用中文 5.要有 ...

  8. bzoj 2244 [SDOI2011]拦截导弹(dp+CDQ+树状数组)

    传送门 题解 看了半天完全没发现这东西和CDQ有什么关系…… 先把原序列翻转,求起来方便 然后把每一个位置表示成$(a,b,c)$其中$a$表示位置,$b$表示高度,$c$表示速度,求有多少个位置$a ...

  9. jmeter+ant+jenkins+mac报告优化(一):解决Min Time和Max Time显示NaN

    一.在上篇博客中生成的报告有两个问题: 1.date not defined 2.Min Time和Max Time显示成了NaN 二.Jmeter+Ant报告生成原理: 1.在Jmeter的extr ...

  10. 【vue】——使用watch 观察路由变化,重新获取内容

    更新:11-29 时隔半年,又重新使用VUE进行开发,有了新方案--beforeRouteLeave 在组件内直接使用,前提是你用了vue-router: beforeRouteLeave (to, ...