日常開發(fā)活動(dòng)中,有時(shí)候需要對(duì)oracle執(zhí)行計(jì)劃進(jìn)行監(jiān)控,以此來(lái)調(diào)優(yōu)程序和數(shù)據(jù)庫(kù)方面的性能。
常用方法有以下幾種:
一、通過(guò)PL/SQL Dev工具
1、直接File->New->Explain Plan Window,在窗口中執(zhí)行sql可以查看計(jì)劃結(jié)果。其中,Cost表示cpu的消耗,單位為n%,Cardinality表示執(zhí)行的行數(shù),等價(jià)Rows。
2、先執(zhí)行 EXPLAIN PLAN FOR select * from tableA where paraA=1,再 select * from table(DBMS_XPLAN.DISPLAY)便可以看到oracle的執(zhí)行計(jì)劃了,看到的結(jié)果和1中的一樣,所以使用工具的時(shí)候推薦使用1方法。
注意:PL/SQL Dev工具的Command window中不支持set autotrance on的命令。還有使用工具方法查看計(jì)劃看到的信息不全,有些時(shí)候我們需要sqlplus的支持。
二、通過(guò)sqlplus
1、一般情況都是本機(jī)鏈接遠(yuǎn)程服務(wù)器,所以命令如下:
sqlplus user/pwd@serviceName
此處的serviceName為tnsnames.ora中定義的命名空間。
2、執(zhí)行set autotrace on,然后執(zhí)行sql語(yǔ)句,會(huì)列出以下信息:
。。。(省略一些信息)
統(tǒng)計(jì)信息
----------------------------------------------------------
1 recursive calls?。w調(diào)用次數(shù))
0 db block gets
2 consistent gets
0 physical reads?。ㄎ锢碜x——執(zhí)行SQL的過(guò)程中,從硬盤上讀取的數(shù)據(jù)塊個(gè)數(shù))
0 redo size (重做數(shù)——執(zhí)行SQL的過(guò)程中,產(chǎn)生的重做日志的大小)
358 bytes sent via SQL*Net to client
366 bytes received via SQL*Net from client
1 SQL*Net roundtrips to/from client
0 sorts (memory) 在內(nèi)存中發(fā)生的排序
0 sorts (disk) 在硬盤中發(fā)生的排序
1 rows processed
省略部分信息和通過(guò)PL/SQL Dev工具查看執(zhí)行計(jì)劃的信息一樣,下面的統(tǒng)計(jì)信息是更詳細(xì)的。
判斷SQL效率高低不關(guān)通過(guò)時(shí)間來(lái)衡量,還應(yīng)該通過(guò)執(zhí)行SQL執(zhí)行狀態(tài)里面的邏輯讀的數(shù)量
邏輯讀=(db block gets+ consistent gets)
FengFly.Com
WWW.FENGFLy.COM FengFly.Com
原文來(lái)自:雨楓技術(shù)教程網(wǎng) http://www.fengfly.com
原文網(wǎng)址:http://www.fengfly.com/plus/view-161902-1.html