SQL*PLUS中,當(dāng)你成功的執(zhí)行一個(gè)DML語(yǔ)句,比如 SELECT , DELETE , UPDATE , INSERT,你 可以通過(guò)SQL優(yōu)化器和語(yǔ)句的執(zhí)行統(tǒng)計(jì)自動(dòng)的獲得一份報(bào)告。這份報(bào)告對(duì)于DML語(yǔ)句的性能監(jiān)控和調(diào)優(yōu)都是很有用處的。這份報(bào)告就是本文要講的AUTOTRACE 報(bào)告。

          ?

          配置AUTOTRACE報(bào)告(Configuring the AUTOTRACE Report)

          你可以通過(guò)以下的AUTOTRACE系統(tǒng)變量來(lái)配置AUTOTRACE報(bào)告. 如下表:

          Table? AUTOTRACE Settings

          AUTOTRACE Setting

          Result

          SET AUTOTRACE OFF

          不能獲得 AUTOTRACE報(bào)告 . 這是默認(rèn)的.

          SET AUTOTRACE ON EXPLAIN

          僅僅顯示優(yōu)化器執(zhí)行計(jì)劃的 AUTOTRACE 報(bào)告

          SET AUTOTRACE ON STATISTICS

          僅僅顯示SQL語(yǔ)句執(zhí)行的統(tǒng)計(jì)結(jié)果的 AUTOTRACE 報(bào)告

          SET AUTOTRACE ON

          包括上面兩項(xiàng)內(nèi)容的AUTOTRACE報(bào)告

          SET AUTOTRACE TRACEONLY

          SET AUTOTRACE ON類(lèi)似 ,所有的統(tǒng)計(jì)和數(shù)據(jù)都在,但不可以打印

          ?

          其實(shí),平時(shí)我們應(yīng)該較多的就是SET AUTOTRACE ON 、SET AUTOTRACE OFF,誰(shuí)會(huì)在乎多看一點(diǎn)AUTOTRACE報(bào)告呢! J

          安裝AUTOTRACE報(bào)告(Setups Required for the AUTOTRACE Report)

          要用這個(gè)特性,用戶(hù)必須被賦予PLUSTRACE角色,而PLUSTRACE角色需要DBA來(lái)賦予。另外,該用戶(hù)必須創(chuàng)建PLAN_TABLE表。

          I.???????????????? 首先創(chuàng)建PLUSTRACE角色并且賦給DBA:

          				CONNECT sys/sys’s password AS SYSDBA 
          		
          				@$ORACLE_HOME/sqlplus/admin/plustrce.sql
          		

          II.????????????? 賦權(quán)限給用戶(hù)

          				CONNECT / AS SYSDBA 
          		

          GRANT PLUSTRACE TO USER(預(yù)賦權(quán)的用戶(hù)名);

          ?

          這樣,就可以在該用戶(hù)下設(shè)置AUTOTRACE報(bào)告的顯示與否了。

          ?

          AUTOTRACE報(bào)告中涉及到的兩個(gè)方面的內(nèi)容

          I.????????????? SQL語(yǔ)句的執(zhí)行計(jì)劃

          執(zhí)行計(jì)劃就是SQL優(yōu)化器執(zhí)行語(yǔ)句的查詢(xún)執(zhí)行順序,每一行的執(zhí)行計(jì)劃都會(huì)有個(gè)行號(hào),這個(gè)行號(hào)是連續(xù)的

          II.????????? SQL語(yǔ)句的數(shù)據(jù)庫(kù)統(tǒng)計(jì)

          數(shù)據(jù)庫(kù)統(tǒng)計(jì)是服務(wù)器記錄的執(zhí)行當(dāng)前的這條語(yǔ)句所需要的系統(tǒng)資源等,主要包括下表的內(nèi)容

          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.

          ?

          簡(jiǎn)單使用的例子:

          SQL> show user

          USER is "SYS"

          (注:當(dāng)前是sysdba用戶(hù))

          (注:創(chuàng)建PLUSTRACE角色并且賦給DBA)

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

          (注:start 等價(jià)于@)

          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給所需用戶(hù),這里用戶(hù)是bill)

          SQL> grant plustrace to bill;

          ?

          Grant succeeded.

          (注:接下來(lái),用bill用戶(hù)連接,測(cè)試AUTOTRACE)

          SQL> connect bill/bill’s password;

          Connected.

          SQL> show user

          USER is "BILL"

          (注:為了看的清楚些,建立一個(gè)測(cè)試的表test,然后察看AUTOTRACE報(bào)告)

          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

          ?

          上面我們就可以看到,當(dāng)你設(shè)置了set AUTOTRACE on后,執(zhí)行相應(yīng)的DML語(yǔ)句,就會(huì)有相應(yīng)的AUTOTRACE報(bào)告出現(xiàn)了。當(dāng)然,我們的這種設(shè)置是session級(jí)別的。這樣,我們就可以根據(jù)AUTOTRACE報(bào)告對(duì)我們執(zhí)行的DML語(yǔ)句進(jìn)行分析和調(diào)優(yōu)了!

          轉(zhuǎn)自:http://dev.csdn.net/develop/article/23/23430.shtm

          Feedback

          # re: 在SQL*PLUS中應(yīng)用AUTOTRACE REPORT(轉(zhuǎn))  回復(fù)  更多評(píng)論   

          2007-08-29 17:46 by dreamstone
          不錯(cuò)啊

          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          posts - 3, comments - 2, trackbacks - 0, articles - 0

          Copyright © 幸福鄉(xiāng)

          主站蜘蛛池模板: 普安县| 庄浪县| 双牌县| 塘沽区| 清流县| 屏东市| 红原县| 永昌县| 资阳市| 宁强县| 玉屏| 襄汾县| 永修县| 穆棱市| 铜鼓县| 淮安市| 三江| 个旧市| 万载县| 霍山县| 土默特左旗| 乌兰察布市| 全椒县| 松江区| 思茅市| 固始县| 满城县| 涪陵区| 景宁| 抚州市| 波密县| 车险| 雷山县| 浑源县| 射阳县| 郑州市| 台山市| 蒙山县| 禹州市| 梁山县| 林州市|