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. - 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执行计划的查看的更多相关文章
- Oracle 执行计划的查看方式
访问数据的方法:一.访问表的方法:1.全表扫描,2.ROWID扫描 二.访问索引的方法:1.索引唯一性扫描,2.索引范围扫描,3.索引全扫 ...
- 查看Oracle执行计划的几种方法
查看Oracle执行计划的几种方法 一.通过PL/SQL Dev工具 1.直接File->New->Explain Plan Window,在窗口中执行sql可以查看计划结果.其中,Cos ...
- 看懂Oracle执行计划
最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也来总结一下自己最近所学,不定时更新ing- 一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问 ...
- 【Oracle】【9】阅读oracle执行计划
正文: 工具:PLSQL 1,配置执行计划需要显示的项 工具→首选项→窗口类型→计划窗口→根据需要配置要显示在执行计划中的列 2,打开执行计划 在SQL窗口执行完一条select语句后按 F5 即可查 ...
- Oracle执行计划 explain plan
Rowid的概念:rowid是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统自己给加上的. 对每个表都有一个rowid的伪列,但是表中并不物理存储ROWID列的值.不过你可以像使用其它列那样 ...
- 转:Oracle 执行计划(Explain Plan) 说明
Oracle 执行计划(Explain Plan) 说明 原贴地址:http://blog.csdn.net/tianlesoftware/article/details/5827245 如果要分 ...
- [转]看懂Oracle执行计划
原文地址:https://www.cnblogs.com/Dreamer-1/p/6076440.html 一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问路径 ...
- 看懂Oracle执行计划、表连接方式
看懂Oracle执行计划 原文:https://www.cnblogs.com/Dreamer-1/p/6076440.html 最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也 ...
- 使用Oracle执行计划分析SQL性能
执行计划:一条查询语句在ORACLE中的执行过程或访问路径的描述.即就是对一个查询任务,做出一份怎样去完成任务的详细方案. 如果要分析某条SQL的性能问题,通常我们要先看SQL的执行计划,看看SQL的 ...
随机推荐
- PostgreSQL操作数据表
1.创建表(SysUser) create table "SysUsers"( "UserId" serial, --用户Id,自增 "LoginNa ...
- 文本相似度 余弦值相似度算法 VS L氏编辑距离(动态规划)
设置n为字符串s的长度.("我是个小仙女") 设置m为字符串t的长度.("我不是个小仙女") 如果n等于0,返回m并退出.如果m等于0,返回n并退出.构造两个向 ...
- Android ImageView,ImageButton 与 Button
1. ImageButton 继承自 ImageView.两者具备甚小,因为 ImageView 同样可以点击相应,同样有点击的阴影效果.实际上他们的区别在于默认 style.比如同样放一个背景和一个 ...
- C语言的第零次作业
C语言--第0次作业 Q1:对于网络专业的了解 一开始我对网络工程这个专业并不是很了解,在报志愿之前,我完全没想过自己会进这个专业,但是经过了一个暑假的时间,我慢慢地开始了解这个学科,并开始对这个专业 ...
- bad interpreter: Text file busy
刚才运行test_mysql.py文件的时候 报了个这样的错.上网查了下,链接在这里:http://www.cnblogs.com/kerrycode/p/4038934.html 于是我就把第一行的 ...
- [科普] 借助 everything 扩展教你屏蔽网址或转发网址
教你屏蔽网址或转发网址 万恶之源 为什么写这篇文章,俺觉得大家应该是有这个需(bai)求(du)的.只是不知道如何操作... 一.屏蔽网址 1.借助系统自带防火墙 (不推荐) Linux 下有 ipt ...
- Mysql6.0连接中的几个问题 Mysql6.xx
Mysql6.0连接中的几个问题 在最近做一些Javaweb整合时,因为我在maven官网查找的资源,使用的最新版,6.0.3,发现MySQL连接中的几个问题,总结如下: 1.Loading clas ...
- 我编写 33 个 VSCode 扩展的原因以及管理扩展的经验
简评:使用工具的同时自己创造一些工具或扩展,是一件很棒的事情. 以下"我"指原作者 Fabio 大家好,我叫 Fabio,是一位自学成才的开发人员,热衷于开源和授权.我也喜欢自己制 ...
- Python 的 GIL 是什么鬼,多线程性能究竟如何
作者:卢钧轶(cenalulu) 本文原文地址: http://cenalulu.github.io/python/gil-in-python/ 前言:博主在刚接触Python的时候时常听到GIL这个 ...
- STM32-RS485通信软硬件实现
OS:Windows 64 Development kit:MDK5.14 IDE:UV4 MCU:STM32F103C8T6/VET6 AD:Altium Designer 18.0.12 1.RS ...