SQL 語句的執(zhí)行效率對于數(shù)據(jù)庫性能的影響非常重大,在性能測試過程中,需要查找和定位可能存在性能瓶頸的SQL 語句。
PL/SQL Developer 是一個Oracle 的PL/SQL 開發(fā)工具,同時具備Oracle 的一些管理功能,可利用它來跟蹤客戶端向Oracle 服務(wù)器提交的所有SQL 語句,方法是選擇Session→SQL Trace命令,如圖8.19 所示。
也可以指定跟蹤某個Session 的SQL 語句,如圖8.20 所示。
如果不用PL/SQL Developer 這類工具,也可以通過修改Oracle 全局參數(shù)sql_trace,來產(chǎn)生Trace 文件,之后再分析Trace 文件來分析提交到Oracle 的SQL 語句。如果想針對某個Session進行SQL 語句的跟蹤,則可以采用以下辦法(以下操作需要在SYS 用戶下進行)。
(1)首先使用以下語句從Oracle 的v$session 表查出所有跟Oracle 連接的客戶端程序的進程:
select SID, SERIAL#, USERNAME,OSUSER,MACHINE,TERMINAL,PROGRAM from v$session
(2)然后利用DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION 包來跟蹤特定的進程向Oracle 提交的SQL 語句。
例如,下面語句為SID 為13,SERIAL#為96 的進程執(zhí)行SQL 語句的跟蹤功能:
execute dbms_system.set_sql_trace_in_session(13,96,TRUE);
(3)如果要停止跟蹤,則提交以下語句:
execute dbms_system.set_sql_trace_in_session(13,96,FALSE);
然后在利用Oracle 的tkprof 工具對記錄下來的SQL 跟蹤文件進行分析,如圖8.21 所示。
另外,也可以利用前面講過的Spotlight 這個工具進行SQL 跟蹤,在Spotlight 中跟蹤指定Session 的SQL 語句,并查看執(zhí)行計劃,如圖8.22 所示。
還可以利用SQL Tuning 的調(diào)優(yōu)建議功能對SQL 語句進行分析,SQL Tunning 將自動查找更優(yōu)的可替代SQL 語句,如圖8.23 所示。
圖8.23 中,SQL Tunning 把原來使用Having 進行條件過濾的SQL 語句改寫為使用Where進行條件過濾,這樣的SQL 語句執(zhí)行效率更高。