oracle 學習筆記---效能優化(1)

zhengbao_jun發表於2010-08-04
ORACLE學習筆記--效能優化(一)

1. 查詢正在執行語句的執行計劃(也就是實際語句執行計劃)

select * from v$sql_plan where hash_value = (select sql_hash_value from v$session where sid = 1111);

其中id和parent_id表示了執行數的結構,數值最大的為最先執行

比如

ID  PARENT_ID   

-------------   

1 0

2 1

3 2

4 3

5 4

6 3  

則執行計劃樹為

              0

              1

              2

              3

           6     4 

                  5

2.如何設定自動跟蹤

用system登入

執行$ORACLE_HOME/rdbms/admin/utlxplan.sql建立計劃表

執行$ORACLE_HOME/sqlplus/admin/plustrce.sql建立plustrace角色

如果想計劃表讓每個使用者都能使用,則

SQL>create public synonym plan_table for plan_table;

SQL> grant all on plan_table to public;

如果想讓自動跟蹤的角色讓每個使用者都能使用,則

SQL> grant plustrace to public;

通過如下語句開啟/停止跟蹤

SET AUTOTRACE ON |OFF | ON EXPLAIN | ON STATISTICS | TRACEONLY | TRACEONLY EXPLAIN

3.如何跟蹤自己的會話或者是別人的會話

跟蹤自己的會話很簡單

Alter session set sql_trace true|false

Or

Exec dbms_session.set_sql_trace(TRUE);

如果跟蹤別人的會話,需要呼叫一個包

exec dbms_system.set_sql_trace_in_session(sid,serial#,true|false)

跟蹤的資訊在user_dump_dest 目錄下可以找到或通過如下指令碼獲得檔名稱(適用於Win環境,如果是unix需要做一定修改)

SELECT p1.value||'\'||p2.value||'_ora_'||p.spid||'.ora' filename

FROM

v$process p,

v$session s,

v$parameter p1,

v$parameter p2

WHERE p1.name = 'user_dump_dest'

AND p2.name = 'db_name'

AND p.addr = s.paddr

AND s.audsid = USERENV ('SESSIONID')

最後,可以通過Tkprof來解析跟蹤檔案,如

Tkprof 原檔案 目標檔案 sys=n

4.怎麼設定整個資料庫系統跟蹤

其實文件上的alter system set sql_trace=true是不成功的,但是可以通過設定事件來完成這個工作,作用相等

alter system set events

'10046 trace name context forever,level 1';

如果關閉跟蹤,可以用如下語句

alter system set events

'10046 trace name context off';

其中的level 1與上面的8都是跟蹤級別

level 1:跟蹤SQL語句,等於sql_trace=true

level 4:包括變數的詳細資訊

level 8:包括等待事件

level 12:包括繫結變數與等待事件

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

相關文章