在SQL*PLUS中应用AUTOTRACE REPORT

 
在SQL*PLUS中应用AUTOTRACE REPORT

 

作者:刘颖博

时间:2004-1-12

mail:liuyingbo@126.com,请指正

 

转载请注明出处及作者

 

 

在SQL*PLUS中,当你成功的执行一个DML语句,比如SELECT, DELETE, UPDATE ,INSERT,你可以通过SQL优化器和语句的执行统计自动的获得一份报告。这份报告对于DML语句的性能监控和调优都是很有用处的。这份报告就是本文要讲的AUTOTRACE 报告。

 

配置AUTOTRACE报告(Configuring the AUTOTRACE Report)

你可以通过以下的AUTOTRACE系统变量来配置AUTOTRACE报告. 如下表:
Table  AUTOTRACE Settings
AUTOTRACE Setting

Result

SET AUTOTRACE OFF

不能获得AUTOTRACE报告. 这是默认的.

SET AUTOTRACE ON EXPLAIN

仅仅显示优化器执行计划的AUTOTRACE报告

SET AUTOTRACE ON STATISTICS

仅仅显示SQL语句执行的统计结果的AUTOTRACE报告

SET AUTOTRACE ON

包括上面两项内容的AUTOTRACE报告

SET AUTOTRACE TRACEONLY

与SET AUTOTRACE ON类似,所有的统计和数据都在,但不可以打印

 

其实,平时我们应该较多的就是SET AUTOTRACE ON 、SET AUTOTRACE OFF,谁会在乎多看一点AUTOTRACE报告呢! J

安装AUTOTRACE报告(Setups Required for the AUTOTRACE Report)

要用这个特性,用户必须被赋予PLUSTRACE角色,而PLUSTRACE角色需要DBA来赋予。另外,该用户必须创建PLAN_TABLE表。

I.                 首先创建PLUSTRACE角色并且赋给DBA:

CONNECT sys/sys’s password AS SYSDBA

@$ORACLE_HOME/sqlplus/admin/plustrce.sql

II.              赋权限给用户

CONNECT / AS SYSDBA

GRANT PLUSTRACE TO USER(预赋权的用户名);

 

这样,就可以在该用户下设置AUTOTRACE报告的显示与否了。

 

AUTOTRACE报告中涉及到的两个方面的内容

I.              SQL语句的执行计划

执行计划就是SQL优化器执行语句的查询执行顺序,每一行的执行计划都会有个行号,这个行号是连续的

II.          SQL语句的数据库统计

数据库统计是服务器记录的执行当前的这条语句所需要的系统资源等,主要包括下表的内容

Database Statistic Name

Description

recursive calls

Number of recursive calls generated at both the user and system level. Oracle maintains tables used for internal processing. When Oracle needs to make a change to these tables, it internally generates an internal SQL statement, which in turn generates a recursive call.

db block gets

Number of times a CURRENT block was requested.

consistent gets

Number of times a consistent read was requested for a block.

physical reads

Total number of data blocks read from disk. This number equals the value of "physical reads direct" plus all reads into buffer cache.

redo size

Total amount of redo generated in bytes.

bytes sent via SQL*Net to client

Total number of bytes sent to the client from the foreground processes.

bytes received via SQL*Net from client

Total number of bytes received from the client over Oracle Net.

SQL*Net roundtrips to/from client

Total number of Oracle Net messages sent to and received from the client.

sorts (memory)

Number of sort operations that were performed completely in memory and did not require any disk writes.

sorts (disk)

Number of sort operations that required at least one disk write.

rows processed

Number of rows processed during the operation.

 

简单使用的例子:

SQL> show user

USER is "SYS"

(注:当前是sysdba用户)

(注:创建PLUSTRACE角色并且赋给DBA)

SQL> start $ORACLE_HOME/sqlplus/admin/plustrce.sql

(注:start 等价于@)

SQL> drop role plustrace;

drop role plustrace

          *

ERROR at line 1:

ORA-01919: role 'PLUSTRACE' does not exist

 

 

SQL> create role plustrace;

 

Role created.

 

SQL>

SQL> grant select on v_$sesstat to plustrace;

 

Grant succeeded.

 

SQL> grant select on v_$statname to plustrace;

 

Grant succeeded.

SQL>

 

SQL> grant select on v_$session to plustrace;

 

Grant succeeded.

 

SQL> grant plustrace to dba with admin option;

 

Grant succeeded.

 

SQL>

SQL> set echo off

(注:赋角色plustrace给所需用户,这里用户是bill)

SQL> grant plustrace to bill;

 

Grant succeeded.

(注:接下来,用bill用户连接,测试AUTOTRACE)

SQL> connect bill/bill’s password;

Connected.

SQL> show user

USER is "BILL"

(注:为了看的清楚些,建立一个测试的表test,然后察看AUTOTRACE报告)

SQL>  create table test(id number(1));

 

Table created.

 

SQL> insert into test values(1);

 

1 row created.

 

SQL> /

 

1 row created.

 

SQL> /

 

1 row created.

 

SQL> /

 

1 row created.

 

SQL> commit;

 

Commit complete.

SQL> select * from test;

 

        ID

----------

         1

         1

         1

         1

 

SQL> set AUTOTRACE on

SQL> select * from test;

 

        ID

----------

         1

         1

         1

         1

 

Execution Plan

----------------------------------------------------------

   0      SELECT STATEMENT Optimizer=CHOOSE

   1    0   TABLE ACCESS (FULL) OF 'TEST'

 

 

 

 

Statistics

----------------------------------------------------------

          0  recursive calls

          0  db block gets

          4  consistent gets

          0  physical reads

          0  redo size

        547  bytes sent via SQL*Net to client

        655  bytes received via SQL*Net from client

          2  SQL*Net roundtrips to/from client

          0  sorts (memory)

          0  sorts (disk)

4         rows processed

 

上面我们就可以看到,当你设置了set AUTOTRACE on后,执行相应的DML语句,就会有相应的AUTOTRACE报告出现了。当然,我们的这种设置是session级别的。这样,我们就可以根据AUTOTRACE报告对我们执行的DML语句进行分析和调优了!

 

参考:

oracle的官方文档(otn.oracle.com)

 

时间: 2024-10-01 16:19:55

在SQL*PLUS中应用AUTOTRACE REPORT的相关文章

[SQL]不要让SQLServer帮你自动转换SQL命令中的数据类型

server|sqlserver|数据|数据类型|转换 为什么不要让SQLServer帮你自动转换SQL命令中的数据类型Report Date:   2003/12/5 Prepared by:     郑昀 Article last modified on 2004-2-16 The information in this article applies to: ü         Microsoft SQL Server 2000,7.0问题陈述:有一天,执行 SELECT * FROM X

在 Visual Studio .NET中使用Crystal Report(下) (cashcho翻译)

visual 在 Visual Studio .NET中使用Crystal Report(下) from www.aspfree.comtranslated by cash(天下第七)cashcao@msn.com(cashcao@msn.com) Crystal Report 演示-使用Push Model 下面看看如何使用Push Model实现Crystal Reports 1.创建一个设计时的dataset 2.创建一个.rpt文件并指向我们前面创建的dataset 3.在.aspx页面

在 Visual Studio .NET中使用Crystal Report(上) cashcho(翻译)

visual 在 Visual Studio .NET中使用Crystal Report(上) from www.aspfree.comtranslated by cash(天下第七)cashcao@msn.com 在我们开始这个关于如何在VS.NET上使用Crystal Reports的小小的研究之前,我和我的朋友都对如何把它应用于我们的Web程序中感到非常的疑惑.一个星期以后,经过一些努力(在网上查找"how-to"文档),我们掌握了将简单的报表加入asp.net程序中的一些小小技

在 Visual Studio .NET中使用Crystal Report(中)

visual 在 Visual Studio .NET中使用Crystal Report(中) from www.aspfree.comtranslated by cash(天下第七)cashcao@msn.com(cashcao@msn.com) Crystal Report演示-使用Pull Model 我们可以用以下步骤来实现Crystal Reports的Pull Model的使用: (1) 创建一个.rpt文件,设定必要的数据库联接. (2)将CrystalReportViewer c

ireport使用中文的问题(不是乱码,是不认sql语句中的中文)!

问题描述 我在建新的report模板时,使用向导的方式创建,默认的sql语句中如果包含中文,则不能正常显示结果,也没有报错.比如sql语句为"select name,age from user where name = '张三'",则在预览报表的时候,显示不出任何内容,但是在数据库中确实是存在内容的.有没有人遇到同样的问题呢....困扰很久了,帮帮忙! 解决方案 select name,age from user where name = '张三' hibernate3查询参数为中文时

在 Visual Studio .NET中使用Crystal Report(中)-报表/图形/Off

在 Visual Studio .NET中使用Crystal Report(中) from www.aspfree.comtranslated by cash(天下第七)cashcao@msn.com(cashcao@msn.com) Crystal Report演示-使用Pull Model 我们可以用以下步骤来实现Crystal Reports的Pull Model的使用: (1) 创建一个.rpt文件,设定必要的数据库联接.(2)将CrystalReportViewer control放到

在 Visual Studio .NET中使用Crystal Report(下) (cashcho翻

在 Visual Studio .NET中使用Crystal Report(下) from www.aspfree.comtranslated by cash(天下第七)cashcao@msn.com(cashcao@msn.com) Crystal Report 演示-使用Push Model 下面看看如何使用Push Model实现Crystal Reports 1.创建一个设计时的dataset2.创建一个.rpt文件并指向我们前面创建的dataset3.在.aspx页面上放置Crysta

SQL Server中Check约束的学习教程_MsSql

0.什么是Check约束? CHECK约束指在表的列中增加额外的限制条件. 注: CHECK约束不能在VIEW中定义.CHECK约束只能定义的列必须包含在所指定的表中.CHECK约束不能包含子查询. 创建表时定义CHECK约束 1.1 语法: CREATE TABLE table_name ( column1 datatype null/not null, column2 datatype null/not null, ... CONSTRAINT constraint_name CHECK (

SQL*Plus中plustrce.sql(SP2-0613、SP2-0611)和(SP2-0618、SP2-0611)

AUTOTRACE是一项 SQL*Plus 功能,自动跟踪为 SQL 语句生成一个执行计划并且提供与该语句的处理有关的统计.SQL*Plus AUTOTRACE 可以用来替代 SQL Trace 使用,AUTOTRACE 的好处是您不必设置跟踪文件的格式,并且它将自动为 SQL 语句显示执行计划.然而,AUTOTRACE 分析和执行语句:而EXPLAIN PLAN仅分析语句. 使用AUTOTRACE不会产生跟踪文件. 一.启用Autotrace功能.任何以SQL*PLUS连接的session都可