查看oracle執(zhí)行計劃
日常開發(fā)活動中,有時候需要對oracle執(zhí)行計劃進(jìn)行監(jiān)控,以此來調(diào)優(yōu)程序和數(shù)據(jù)庫方面的性能。
常用方法有以下幾種:
一、通過PL/SQL Dev工具
1、直接File->New->Explain Plan Window,在窗口中執(zhí)行sql可以查看計劃結(jié)果。其中,Cost表示cpu的消耗,單位為n%,Cardinality表示執(zhí)行的行數(shù),等價Rows。
2、先執(zhí)行 EXPLAIN PLAN FOR select * from tableA where paraA=1,再 select * from table(DBMS_XPLAN.DISPLAY)便可以看到oracle的執(zhí)行計劃了,看到的結(jié)果和1中的一樣,所以使用工具的時候推薦使用1方法。
注意:PL/SQL Dev工具的Command window中不支持set autotrance on的命令。還有使用工具方法查看計劃看到的信息不全,有些時候我們需要sqlplus的支持。
二、通過sqlplus
1、一般情況都是本機(jī)鏈接遠(yuǎn)程服務(wù)器,所以命令如下:
sqlplus user/pwd@serviceName
此處的serviceName為tnsnames.ora中定義的命名空間。
2、執(zhí)行set autotrace on,然后執(zhí)行sql語句,會列出以下信息:
。。。(省略一些信息)
統(tǒng)計信息
----------------------------------------------------------
1 recursive calls (歸調(diào)用次數(shù))
0 db block gets
2 consistent gets
0 physical reads (物理讀——執(zhí)行SQL的過程中,從硬盤上讀取的數(shù)據(jù)塊個數(shù))
0 redo size (重做數(shù)——執(zhí)行SQL的過程中,產(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
省略部分信息和通過PL/SQL Dev工具查看執(zhí)行計劃的信息一樣,下面的統(tǒng)計信息是更詳細(xì)的。
判斷SQL效率高低不關(guān)通過時間來衡量,還應(yīng)該通過執(zhí)行SQL執(zhí)行狀態(tài)里面的邏輯讀的數(shù)量
邏輯讀=(db block gets+ consistent gets)
常用方法有以下幾種:
一、通過PL/SQL Dev工具
1、直接File->New->Explain Plan Window,在窗口中執(zhí)行sql可以查看計劃結(jié)果。其中,Cost表示cpu的消耗,單位為n%,Cardinality表示執(zhí)行的行數(shù),等價Rows。
2、先執(zhí)行 EXPLAIN PLAN FOR select * from tableA where paraA=1,再 select * from table(DBMS_XPLAN.DISPLAY)便可以看到oracle的執(zhí)行計劃了,看到的結(jié)果和1中的一樣,所以使用工具的時候推薦使用1方法。
注意:PL/SQL Dev工具的Command window中不支持set autotrance on的命令。還有使用工具方法查看計劃看到的信息不全,有些時候我們需要sqlplus的支持。
二、通過sqlplus
1、一般情況都是本機(jī)鏈接遠(yuǎn)程服務(wù)器,所以命令如下:
sqlplus user/pwd@serviceName
此處的serviceName為tnsnames.ora中定義的命名空間。
2、執(zhí)行set autotrace on,然后執(zhí)行sql語句,會列出以下信息:
。。。(省略一些信息)
統(tǒng)計信息
----------------------------------------------------------
1 recursive calls (歸調(diào)用次數(shù))
0 db block gets
2 consistent gets
0 physical reads (物理讀——執(zhí)行SQL的過程中,從硬盤上讀取的數(shù)據(jù)塊個數(shù))
0 redo size (重做數(shù)——執(zhí)行SQL的過程中,產(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
省略部分信息和通過PL/SQL Dev工具查看執(zhí)行計劃的信息一樣,下面的統(tǒng)計信息是更詳細(xì)的。
判斷SQL效率高低不關(guān)通過時間來衡量,還應(yīng)該通過執(zhí)行SQL執(zhí)行狀態(tài)里面的邏輯讀的數(shù)量
邏輯讀=(db block gets+ consistent gets)
posted on 2009-08-12 10:49 andy.kong 閱讀(9753) 評論(7) 編輯 收藏 所屬分類: oracle