不論是做為開發DBA還是維護DBA,總是或多或少地遇到SQL執行效率或者說SQL調優問題,查看執行計劃是必須的。一般我們可以用3種方法查看:
一、explain plan for
舉例就足以說明其用法
sys@ORCL> explain plan for
2 select sysdate from dual;
Explained.
sys@ORCL> select * from table(dbms_xplan.display());
PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------
--------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost |
--------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | |
| 1 | TABLE ACCESS FULL | DUAL | | | |
--------------------------------------------------------------------
Note: rule based optimization
9 rows selected.
二、利用TKPROF工具
TKPROF是一個用於分析oracle跟蹤文件並且產生一個更加清晰合理的輸出結果的可執行工具。如果一個系統的執行效率比較低,一個比較好的方法是跟蹤用戶的會話並且使用TKPROF工具的排序功能格式化輸出,從而找出有問題的SQL語句。
TKPROF命令後面的選項及輸出文件各個列的含義在這裡不做詳細的介紹。 google一下就會有很多資料。
下面簡單描述一下TKPROF工具的使用步驟:
1、在session級別設置sql_trace=true
sys@ORCL> alter session set sql_trace=true;
Session altered.
如果要在pl/sql中對session級別設置true,可以使用dbms_system這個包:
sys@ORCL> exec dbms_system.set_sql_trace_in_session(sid,serial#,true);
2、指定一下生成的trace文件的名字,便於查找:
sys@ORCL> alter session set tracefile_identifier='yourname';
3、執行SQL語句。
4、利用TKPROF工具格式化輸出的trace 文件:
[oracle@q1test01 ~] $ tkprof /oracle/admin/orcl/udump/orcl_ora_10266_yourname.trc /oracle/yourname.txt explain=user/pwd aggregate=yes sys=no waits=yes sort=fchela
5、查看生成的文件再設置sql_trace=false:
sys@ORCL> alter session set sql_trace=false;