oracle中跟蹤sql執行計劃的方法

chenfengwww發表於2011-01-19

來自:%BC%FB%D6%A4my%B3%C9%B3%A4/blog/item/aa3c6ffd53537f3c5d600835.html

不論是做為開發DBA還是維護DBA,總是或多或少地遇到SQL執行效率或者說SQL調優問題,檢視執行計劃是必須的。本文介紹了3種常用檢視方法。

不論是做為開發還是維護DBA,總是或多或少地遇到SQL執行效率或者說SQL調優問題,檢視執行計劃是必須的。一般我們可以用3種方法檢視:

  一、explain plan for

  舉例就足以說明其用法  

sys@ORCL> explain plan for
  2 select sysdate from dual;
  Explained.
  sys@ORCL> select * from (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、在級別設定sql_trace=true

 sys@ORCL> alter session sql_trace=true;
  Session altered.

  如果要在pl/sql中對session級別設定true,可以使用dbms_system這個包:

  sys@ORCL> exec dbms_system.set_sql_trace_in_session(sid,#,true);

  2、指定一下生成的trace檔案的名字,便於查詢:  

> 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 =yes sys=no waits=yes sort=fchela

  5、檢視生成的檔案再設定sql_trace=false: 

> alter sql_trace=false;

  三、set autotrace on

  此種方法最常用,關於如何設定sql*plus的autotrace這裡也不做詳細介紹,因為google上面資料確實太多了。有心的朋友可以去找找,保證有一大堆適合你的資料。

  舉個例子,這種方法簡單易懂: 

ctoc@ORCL> set autotrace on
  ctoc@ORCL> select sysdate from dual;
  SYSDATE
  ---------
  25-JUN-08
  Execution Plan
  ----------------------------------------------------------
  0 SELECT STATEMENT ptimizer=CHOOSE
  1 0 TABLE ACCESS (FULL) OF 'DUAL'
  Statistics
  ----------------------------------------------------------
  0 recursive calls
  0 db block gets
  3 consistent gets
  0 physical reads
  0 redo size
  522 bytes sent via SQL*Net to
  655 bytes received via SQL*Net from client
  2 SQL*Net roundtrips to/from client
  0 sorts (memory)
  0 sorts (disk)
  1 rows processed
[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22036495/viewspace-1044872/,如需轉載,請註明出處,否則將追究法律責任。

相關文章