(转)Autotrace工具使用——小工具,大用场
监控SQL语句,获取执行计划和执行成本,是每个Oracle开发人员与DBA所必须具备的能力之一。
当Oracle彻底进入CBO时代,我们面对一种全新的局面。一方面,基于数据统计量的CBO优化器,让SQL语句执行计划生成更加科学、更加有效。但是另一方面,优化器和优化模式也变得越来越复杂。我们对于一个SQL操作的执行计划关注度和不确定程度同时在提升。
在这样的情况下,Oracle提供了一系列的观察SQL执行计划的工具,其中Autotrace工具是最简单和常用的工具。
简单的说,Autotrace工具具有对SQL语句执行计划进行分析输出,以及评估执行使用资源。下面,我们对Autotrace工具从安装、使用到结果分析进行简单的介绍。
Autotrace安装
首先,有一点需要说明:Autorace工具是在Oracle提供的Sqlplus窗口上使用。在如pl/sql developer之类的开发工具上是不能使用的。sqlplus虽然使用简单,但是存在界面交互性差的特点。所以如果在Windows平台上,可以在sqlplusw中使用autotrace。不过很遗憾的是,Oracle11g中,sqlplusw这个鸡肋工具也已经不存在了。
还有一点建议的是,Autotrace是一个很安全的调试工具。最好可以设置给所有Oracle可以访问到(赋给public用户)。但是,安装的过程中因为存在赋权限相关的内容,最好使用sys用户登录。
安装Autotrace工具,共分为两个步骤:
步骤一、创建plan_table数据表。Plan_table是Oracle中一个很常用的数据表。它主要为各种工具提供装载生成sql执行计划的空间。
//使用Windows环境下做演示;
SQL*Plus: Release 10.2.0.1.0 - Production on 星期日 1月 30 20:22:07 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn / as sysdba;
已连接。
SQL> show user
USER 为 "SYS"
SQL> @?\rdbms\admin\utlxplan.sql
表已创建。
建立数据表:plan_table是通过脚本utlxplan.sql实现的。该脚本在${ORACLE_HOME}/rdbms/admin目录下(注意windows和Linux/Unix目录结构的差异)。
该端演示是使用sqlplusw进行的。其中?表示${ORACLE_HOME}目录,在sqlplus中可以使用?来进行代表。如果在其他工具下,比如PL/SQL Developer下,可以在command窗口下使用 @{脚本路径}\utlxplan.sql。该脚本只是一个create table plan_table命令,如果有兴趣可以单独打开该文件。
之后,通过公有同义词和授权方法,将plan_table使用权给所有用户。
SQL> create public synonym plan_table for plan_table;
SQL> grant all on plan_table to public;
授权成功。
步骤二、安装autotrace脚本
autotrace工具脚本执行。在sqlplusw窗口下执行:
SQL> @?\sqlplus\admin\plustrce.sql//注意是plustrce.sql,不是plustrace.sql,笔者当年困惑了好久。。。
SQL>
SQL> drop role plustrace;
角色已删除。
SQL> create role plustrace;
角色已创建。
SQL>
SQL> grant select on v_$sesstat to plustrace;
授权成功。
SQL> grant select on v_$statname to plustrace;
授权成功。
SQL> grant select on v_$mystat to plustrace;
授权成功。
SQL> grant plustrace to dba with admin option;
授权成功。
上面的脚本中,只有@?\sqlplus\admin\plustrce.sql是需要输入的内容,其他都是输入脚本的语句。
最后,如果希望所有的用户都能使用的autotrace工具,只要将plustrace角色赋给public就可以了。
SQL> grant plustrace to public;
授权成功。
设置结束后,我们已经完全安装好autotrace工具了。下面简单介绍一下,如果和使用autotrace工具。
使用autotrace
使用autorace是在sqlplus环境下,通过对autotrace的开启关闭来设置。下面是一个简单的例子。
SQL> conn scott/tiger@orcl
已连接。
SQL> set timing on;//设置其可以显示出所有sql语句的执行时间,非常实用!!
SQL> set autotrace on; //设置所有的内容。
SQL> select count(*) from emp;
COUNT(*)
---------- ………………………语句执行结果
14
已用时间: 00: 00: 00.03
执行计划
----------------------------------------------------------
Plan hash value: 2937609675
-------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time |
-------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 1 (0)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | | |
| 2 | INDEX FULL SCAN| PK_EMP | 14 | 1 (0)| 00:00:01 |
-------------------------------------------------------------------
统计信息
----------------------------------------------------------
219 recursive calls
0 db block gets
41 consistent gets
1 physical reads
0 redo size
408 bytes sent via SQL*Net to client
385 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
5 sorts (memory)
0 sorts (disk)
1 rows processed
SQL>
观察这个输出结果,我们可以看出结果分为下面几个部分:
1、输出结果:SQL语句的结果;
2、执行计划;
3、统计信息;
每个部分分别承担了不同的地位和作用。但是有一点需要注意,输出的执行计划和依据,都是根据统计量进行评估的结果。实际执行的成本常常与执行计划后面每个步骤的数值有差异。
对set autotrace命令,还存在一些变种,方便使用。
I set autotrace on explain; 只显示出执行计划;
II set autotrace on statistics; 只显示出统计量信息;
III set autotrace traceonly; 不显示查询结果;
IIII set autotrace traceonly explain; 只显示执行语句,并且不会执行语句。最适合进行大表操作的预估算;
最后,我们介绍一下统计量的各部分含义。
|
项目 |
含义 |
备注 |
|
recursive calls |
递归调用SQL的个数;Oracle在执行这个SQL的时候,有时候会生成很多额外的SQL语句,这个就成为递归调用; |
|
|
db block gets |
逻辑读,从数据buffer cache中读取;进行current模式读取; |
|
|
consistent gets |
逻辑读,进行一致读模式读取; |
|
|
physical reads |
物理读成本; |
|
|
redo size |
产生重做日志大小 |
|
|
bytes sent via SQL*Net to client |
利用sql*net传入到client的字节数; |
|
|
bytes received via SQL*Net from client |
利用sql*net传出client的字节数; |
|
|
SQL*Net roundtrips to/from client |
||
|
sorts (memory) |
内存中排序空间使用; |
|
|
sorts (disk) |
物理存储中排序空间使用; |
如果memory空间使用不足,是会使用disk的空间的; |
|
rows processed |
Autorace工具是我们经常使用的性能评测工具,能够帮助解决很多问题。与其相同地位的还有dbms_xplan包方法和set events跟踪事件文件。
转自:http://space.itpub.net/17203031/viewspace-686535
(转)Autotrace工具使用——小工具,大用场的更多相关文章
- 文件查找工具Everything小工具的使用
Everything 小工具的使用: 首先它是一款基于名称实时定位文件和目录的搜索工具,有以下几个优点: 快速文件索引 快速文件搜索 较低资源占用 轻松分享文件索引 实时跟踪文件更新 通过使用ever ...
- JavaGUI练习 - 正交测试用例生成小工具
正交表生成小工具 说明 小工具的适用对象主要是测试人员,他们日常工作中手动设计大量测试用例,工作繁杂甚至还存在覆盖不全面等问题. 为了提高他们的测试效率,该小工具可以通过输入一组多因素多水平的数据,然 ...
- 18种CSS3loading效果完整版,兼容各大主流浏览器,提供在线小工具使用
今天把之前分享的两篇博客<CSS3实现10种Loading效果>和 <CSS3实现8种Loading效果[二]>整理了一下.因为之前所分享的各种loading效果都只是做了we ...
- 批量下载网站图片的Python实用小工具(下)
引子 在 批量下载网站图片的Python实用小工具 一文中,讲解了开发一个Python小工具来实现网站图片的并发批量拉取.不过那个工具仅限于特定网站的特定规则,本文将基于其代码实现,开发一个更加通用的 ...
- 偷懒小工具 - SSO单点登录通用类(可跨域)
写在前面的话 上次发布过一篇同样标题的文章.但是因为跨域方面做得不太理想.我进行了修改,并重新分享给大家. 如果这篇文章对您有所帮助,请您点击一下推荐.以便有动力分享出更多的"偷懒小工具&q ...
- WPF根据Oracle数据库的表,生成CS文件小工具
开发小工具的原因: 1.我们公司的开发是客户端用C#,服务端用Java,前后台在通讯交互的时候,会用到Oracle数据库的字段,因为服务器端有公司总经理开发的一个根据Oracle数据库的表生成的cla ...
- WPF开发查询加班小工具
先说一下,我们公司是六点下班,超过7点开始算加班,但是加班的时间是从六点开始计算,以0.5个小时为计数,就是你到了六点半,不算加班半小时,但是加班到七点半,就是加班了一个半小时. 一.打卡记录 首先, ...
- python开发目录合并小工具 PathMerge
前言 这个程序陆陆续续开发了几天,正好我在学Python,就一边做一边学,倒是学到不少东西. 不得不说python是快速开发的好工具. 程序做了一些改进,这两天又忙着毕设,现在才想起来发到博客上.想想 ...
- JSON生成c#类代码小工具
JSON生成c#类代码小工具 为什么写这么个玩意 最近的项目中需要和一个服务端程序通讯,而通讯的协议是基于流行的json,由于是.net,所以很简单的从公司代码库里找到了Newtonsoft.dll( ...
随机推荐
- wireshark抓一抓,看是不是另一个机器也企图DHCP
早上的问题,昨晚四点睡,今早九点半起... 到公司处理此问题,不知道相关性大不大..
- XJOI网上同步训练DAY6 T2
思路:记得FJ省队集训好像有过这题,可是我太弱了,根本不懂T_T #include<cstdio> #include<iostream> #include<cmath&g ...
- poj2068--Nim
题意:给你2n个人,两方各n个人,交叉坐,每个人可以取的石子有一个最大限制,总共有S颗石子,哪一方取了最后一颗石子就输了,问先取石子的这一方是否有必胜策略. DP,dp[i][j]代表第i个人还有J个 ...
- USART笔记 基于STM32F107VCT6
USART 通用同步异步收发器 通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换.USART利用分数波特率发生器提供宽范围的 ...
- C#进程间通信--API传递参数(SendMessage)
原文 C#进程间通信--API传递参数(SendMessage) 我们不仅可以传递系统已经定义好的消息,还可以传递自定义的消息(只需要发送消息端和接收消息端对自定义的消息值统一即可).下面的发送和接 ...
- Linux 杀死挂起的进程
在用管理员执行一个命令后,用Ctrl+Z把命令转移到了后天.导致无法退出root的. 输入命令:exit终端显示:There are stopped jobs. 解决方法:方法一.输入命令:jobs终 ...
- 1645: [Usaco2007 Open]City Horizon 城市地平线
1645: [Usaco2007 Open]City Horizon 城市地平线 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 315 Solved: ...
- Linux企业级项目实践之网络爬虫(5)——处理配置文件
配置文件在Linux下使用得非常普遍,但是Linux下没有统一个配置文件标准. 我们把配置文件的规则制定如下: 1.把"#"视作注释开始 2.所有的配置项都都是以键值对的形式出现 ...
- paip.hadoop的应用研究总结
paip.hadoop的应用研究总结 作者Attilax , EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net/attil ...
- UGUI 下拉滚动框
开始制作好友系统了, 发现有一个UI跟QQ的面板一模一样. 于是就写了一个公共的下拉滚动框.需要把按钮的中心点(pivot.y = 1),描点为最上方 直接上图吧 代码如下: using UnityE ...