oracle 跟蹤檔案理論整理

wengtf發表於2012-07-09

以下內容轉至csdn網友,權當理論的個人理解,覺得挺好!

一般情況下我們可以通過初始化引數SQL_TRACE=TRUE來設定SQL跟蹤。我們也可以通過設定10046事件來進行SQL跟蹤,並且可以設定不同的跟蹤級別,比使用SQL_TRACE獲得更多的資訊。

Level 0   停用SQL跟蹤,相當於SQL_TRACE=FALSE
Level 1   標準SQL跟蹤,相當於SQL_TRACE=TRUE
Level 4   在level 1的基礎上增加繫結變數的資訊
level 8   在level 1的基礎上增加等待事件的資訊
Level 12 在level 1的基礎上增加繫結變數和等待事件的資訊

10046事件不但可以跟蹤使用者會話(trace檔案位於USER_DUMP_DEST),也可以跟蹤background程式(trace檔案位於BACKGROUND_DUMP_DEST)。

trace檔案的大小決定於4個因素:
跟蹤級別,跟蹤時長,會話的活動級別和MAX_DUMP_FILE_SIZE引數

讓我們從頭說起:
[b]一、Oracle跟蹤檔案[/b]
Oracle跟蹤檔案分為三種型別:

一種是後臺報警日誌檔案:
記錄資料庫在啟動、關閉和執行期間後臺程式的活動情況,如表空間建立、回滾段建立、某些alter命令、日誌切換、錯誤訊息等。
在資料庫出現故障時,應首先檢視該檔案,但檔案中的資訊與任何錯誤狀態沒有必然的聯絡。後臺報警日誌檔案儲存BACKGROUND_DUMP_DEST引數指定的目錄中,檔案格式為SIDALRT.LOG。

另一種型別是DBWR、LGWR、SMON等後臺程式建立的後臺跟蹤檔案:
後臺跟蹤檔案根據後臺程式執行情況產生,後臺跟蹤檔案也儲存在BACKGROUND_DUMP_DEST引數指定的目錄中,檔案格式為siddbwr.trc、sidsmon.trc等。

還有一種型別是由連線到Oracle的使用者程式(Server Processes)生成的使用者跟蹤檔案。
這些檔案僅在使用者會話期間遇到錯誤時產生。此外,使用者可以通過執行oracle跟蹤事件(見後面)來生成該類檔案,使用者跟蹤檔案儲存在USER_DUMP_DEST引數指定的目錄中,檔案格式為oraxxxxx.trc,xxxxx為建立檔案的程式號(或執行緒號)。
  

[b]二、Oracle跟蹤事件[/b]
Oracle提供了一類命令,可以將Oracle各類內部結構中所包含的資訊轉儲(dump)到跟蹤檔案中,以便使用者能根據檔案內容來解決各種故障。
設定跟蹤事件有兩種方法:
一種是在init.ora檔案中設定事件。
這樣open資料庫後,將影響到所有的會話。設定格式如下:
EVENT="eventnumber trace name eventname [forever,] [level levelnumber] : ......."
通過:符號,可以連續設定多個事件,也可以通過連續使用event來設定多個事件。

另一種方法是在會話過程中使用alter session set events命令。
只對當前會話有影響。設定格式如下:
alter session set events '[eventnumber|immediate] trace name eventname [forever] [, level levelnumber] : .......'
通過:符號,可以連續設定多個事件,也可以通過連續使用alter session set events 來設定多個事件。

格式說明:event number指觸發dump的事件號,事件號可以是Oracle錯誤號(出現相應錯誤時跟蹤指定的事件)或oralce內部事件號,內部事件號在10000到10999之間,不能與immediate關鍵字同用。
immediate關鍵字表示命令發出後,立即將指定的結構dump到跟蹤檔案中,這個關鍵字只用在alter session語句中,並且不能與 eventnumber、forever關鍵字同用。
trace name 是關鍵字。
eventname指事件名稱(見後面),即要進行dump的實際結構名。若eventname為context,則指根據內部事件號進行跟蹤。
forever關鍵字表示事件在例項或會話的週期內保持有效狀態,不能與immediate同用。
level為事件級別關鍵字。但在dump錯誤棧(errorstack)時不存在級別。
levelnumber表示事件級別號,一般從1到10,1表示只dump結構頭部資訊,10表示dump結構的所有資訊。
1、buffers事件:dump SGA緩衝區中的db buffer結構
alter session set events 'immediate trace name buffers level 1'; --表示dump緩衝區的頭部。
2、blockdump事件:dump資料檔案、索引檔案、回滾段檔案結構
alter session set events 'immediate trace name blockdump level 66666'; --表示dump塊地址為6666的資料塊。
在Oracle 8以後該命令已改為:
alter system dump datafile 11 block 9; --表示dump資料檔案號為11中的第9個資料塊。
3、controlf事件:dump控制檔案結構
alter session set events 'immediate trace name controlf level 10'; --表示dump控制檔案的所有內容。
4、locks事件:dump LCK程式的鎖資訊
alter session set events 'immediate trace name locks level 5';
5、redohdr事件:dump redo日誌的頭部資訊
alter session set events 'immediate trace name redohdr level 1'; --表示dump redo日誌頭部的控制檔案項。
alter session set events 'immediate trace name redohdr level 2'; --表示dump redo日誌的通用檔案頭。
alter session set events 'immediate trace name redohdr level 10'; --表示dump redo日誌的完整檔案頭。
注意:redo日誌的內容dump可以採用下面的語句:
alter system dump logfile 'logfilename';
6、loghist事件:dump控制檔案中的日誌歷史項
alter session set events 'immediate trace name loghist level 1'; --表示只dump最早和最遲的日誌歷史項。
levelnumber大於等於2時,表示2的levelnumber次方個日誌歷史項。
alter session set events 'immediate trace name loghist level 4'; --表示dump 16個日誌歷史項。
7、file_hdrs事件:dump 所有資料檔案的頭部資訊
alter session set events 'immediate trace name file_hdrs level 1'; --表示dump 所有資料檔案頭部的控制檔案項。
alter session set events 'immediate trace name file_hdrs level 2'; --表示dump 所有資料檔案的通用檔案頭。
alter session set events 'immediate trace name file_hdrs level 10'; --表示dump 所有資料檔案的完整檔案頭。
8、errorstack事件:dump 錯誤棧資訊,通常Oracle發生錯誤時前臺程式將得到一條錯誤資訊,但某些情況下得不到錯誤資訊,可以採用這種方式得到Oracle錯誤。
alter session set events '604 trace name errorstack forever'; --表示當出現604錯誤時,dump 錯誤棧和程式棧。
9、systemstate事件:dump所有系統狀態和程式狀態
alter session set events 'immediate trace name systemstate level 10'; --表示dump 所有系統狀態和程式狀態。
10、coalesec事件:dump指定表空間中的自由區間
levelnumber以十六進位制表示時,兩個高位位元組表示自由區間數目,兩個低位位元組表示表空間號,如0x00050000表示dump系統表空間中的5個自由區間,轉換成十進位制就是327680,即:
alter session set events 'immediate trace name coalesec level 327680';
11、processsate事件:dump程式狀態
alter session set events 'immediate trace name processsate level 10';
12、library_cache事件:dump library cache資訊
alter session set events 'immediate trace name library_cache level 10';
13、heapdump事件:dump PGA、SGA、UGA中的資訊
alter session set events 'immediate trace name heapdump level 1';
14、row_cache事件:dump資料字典緩衝區中的資訊
alter session set events 'immediate trace name row_cache level 1';

[b]三、內部事件號[/b]
1、10013:用於監視事務恢復
2、10015:轉儲UNDO SEGMENT頭部
event = "10015 trace name context forever"
3、10029:用於給出會話期間的登陸資訊
4、10030:用於給出會話期間的登出資訊
5、10032:轉儲排序的統計資訊
6、10033:轉儲排序增長的統計資訊
7、10045:跟蹤Freelist管理操作
8、10046:跟蹤SQL語句
alter session set events '10046 trace name context forever, level 4'; --跟蹤SQL語句並顯示繫結變數
alter session set events '10046 trace name context forever, level 8'; --跟蹤SQL語句並顯示等待事件
9、10053:轉儲優化策略
10、10059:模擬redo日誌中的建立和清除錯誤
11、10061:阻止SMON程式在啟動時清除臨時段
12、10079:轉儲 SQL*NET統計資訊
13、10081:轉儲高水標記變化
14、10104:轉儲Hash連線統計資訊
15、10128:轉儲分割槽休整資訊
16、10200:轉儲一致性讀資訊
17、10201:轉儲一致性讀中Undo應用
18、10209:允許在控制檔案中模擬錯誤
19、10210:觸發資料塊檢查事件
event = "10210 trace name context forever, level 10"
20、10211:觸發索引檢查事件
21、10213:模擬在寫控制檔案後崩潰
22、10214:模擬在控制檔案中的寫錯誤
levelnumber從1-9表示產生錯誤的塊號,大於等於10則每個控制檔案將出錯
23、10215:模擬在控制檔案中的讀錯誤
24、10220:轉儲Undo頭部變化
25、10221;轉儲Undo變化
26、10224:轉儲索引的分隔與刪除
27、10225:轉儲基於字典管理的區間的變化
28、10229:模擬在資料檔案上的I/O錯誤
29、10231:設定在全表掃描時忽略損壞的資料塊
alter session set events '10231 trace name context off'; -- 關閉會話期間的資料塊檢查
event = "10231 trace name context forever, level 10" -- 對任何程式讀入SGA的資料塊進行檢查
30、10232:將設定為軟損壞(DBMS_REPAIR包設定或DB_BLOCK_CHECKING為TRUE時設定)的資料塊dump到跟蹤檔案
31、10235:用於記憶體堆檢查
alter session set events '10235 trace name context forever, level 1';
32、10241:轉儲遠端SQL執行
33、10246:跟蹤PMON程式
34、10248:跟蹤dispatch程式
35、10249:跟蹤MTS程式
36、10252:模擬寫資料檔案頭部錯誤
37、10253:模擬寫redo日誌檔案錯誤
38、10262:允許連線時存在記憶體洩漏
alter session set events '10262 trace name context forever, level 300'; -- 允許存在300個位元組的記憶體洩漏
39、10270:轉儲共享遊標
40、10285:模擬控制檔案頭部損壞
41、10286:模擬控制檔案開啟錯誤
42、10287:模擬歸檔出錯
43、10357:除錯直接路徑機制
44、10500:跟蹤SMON程式
45、10608:跟蹤點陣圖索引的建立
46、10704:跟蹤enqueues
47、10706:跟蹤全域性enqueues
48、10708:跟蹤RAC的buffer cache
49、10710:跟蹤對點陣圖索引的訪問
50、10711:跟蹤點陣圖索引合併操作
51、10712:跟蹤點陣圖索引OR操作
52、10713:跟蹤點陣圖索引AND操作
53、10714:跟蹤點陣圖索引MINUS操作
54、10715:跟蹤點陣圖索引向ROWID的轉化
55、10716:跟蹤點陣圖索引的壓縮與解壓
56、10719:跟蹤點陣圖索引的修改
57、10731:跟蹤遊標宣告
58、10928:跟蹤PL/SQL執行
59、10938:轉儲PL/SQL執行統計資訊
最後要說明的是,由於版本不同以上語法可能有些變化,但大多數還是可用的。

附完整的跟蹤事件列表,event No.10000 to 10999

SET SERVEROUTPUT ON
DECLARE
err_msg VARCHAR2(120);
BEGIN
dbms_output.enable (1000000);
FOR err_num IN 10000..10999
LOOP
err_msg := SQLERRM (-err_num);
IF err_msg NOT LIKE '%Message '||err_num||' not found%' THEN
dbms_output.put_line (err_msg);
END IF;
END LOOP;
END;
/

1.select sid,serial#,username,osuser,machine from v$session;查詢session的sid,serial#

2.exec dbms_system.set_sql_trace_in_session(141,6,true);開始跟蹤

3.exec dbms_system.set_sql_trace_in_session(141,6,true) 停止跟蹤

4.tkprof *.trc *.txt

1.select sid,serial#,username,osuser,machine from v$session;查詢session的sid,serial#

2.exec dbms_system.set_sql_trace_in_session(141,6,true);開始跟蹤

3.exec dbms_system.set_sql_trace_in_session(141,6,true) 停止跟蹤

4.tkprof *.trc *.txt

5.檢視檔案


[b]四、跟蹤事件10046[/b]

一、使用跟蹤事件10046

很多時候,對資料庫進行效能診斷可以使用SQL跟蹤的方法,把一些資訊記錄在trace檔案裡以後分析。一般情況下我們可以通過初始化引數SQL_TRACE=TRUE來設定SQL跟蹤。我們也可以通過設定10046事件來進行SQL跟蹤,並且可以設定不同的跟蹤級別,比使用SQL_TRACE獲得更多的資訊。
Level 0   停用SQL跟蹤,相當於SQL_TRACE=FALSE
Level 1   標準SQL跟蹤,相當於SQL_TRACE=TRUE
Level 4   在level 1的基礎上增加繫結變數的資訊
level 8   在level 1的基礎上增加等待事件的資訊
Level 12 在level 1的基礎上增加繫結變數和等待事件的資訊
10046事件不但可以跟蹤使用者會話(trace檔案位於USER_DUMP_DEST),也可以跟蹤background程式(trace檔案位於BACKGROUND_DUMP_DEST)。
trace檔案的大小決定於4個因素:
跟蹤級別,跟蹤時長,會話的活動級別和MAX_DUMP_FILE_SIZE引數。

二、啟用跟蹤事件10046

0.準備工作

1)Init.ORA引數
timed_statistics 設定為true(也可以在session上設定),否則不會有CPU時間資訊  
user_dump_dest 指定trace檔案生成的目錄  
max_dump_file_size trace檔案的最大尺寸(單位為作業系統塊),UMLIMITED表示沒有限制,Oracle8以後可以在後面加上K或M來表示檔案大小 
optimizer_mode 定義預設的查詢優化器。雖然可以用alter session來設定,但在格式化trace檔案裡optimizer_mode會回覆到原來的設定(一個新的session來分析SQL的執行計劃),這樣會產生不準確的執行計劃,所以建議不要通過session來修改這個引數。
注:在執行tkprof時不要加explain引數,就不存在這個問題,執行計劃是Oracle在執行時所用的計劃

2) 確定是以"dedicated"方式連線到資料庫
通過tnsping service_name檢視

1.在全域性設定

在初始化引數init.ora中加入:
EVENT = "10046 trace name context forever, level 8"

SQL_TRACE = TRUE

SQL> exec dbms_monitor.database_trace_enable('waits=>true,binds=>false,instance_name=>'wending');
全域性設定會對系統效能造成明顯的影響,建議不要使用。

2.跟蹤當前session

SQL> ALTER SESSION SET sql_trace=TRUE;
SQL> ALTER SESSION SET sql_trace=FALSE;

SQL> alter session set events '10046 trace name context forever, level 8';
SQL> alter session set events '10046 trace name context off';

SQL> EXEC DBMS_SESSION.set_sql_trace(sql_trace => TRUE);
SQL> EXEC DBMS_SESSION.set_sql_trace(sql_trace => FALSE);

SQL> @?/rdbms/admin/dbmssupp.sql   --DBMS_SUPPORT包需要單獨安裝,用sys使用者安裝
SQL> EXEC DBMS_SUPPORT.start_trace(waits=>TRUE, binds=>FALSE);
SQL> EXEC DBMS_SUPPORT.stop_trace;

在Oracle10g裡推薦使用DBMS_MONITOR:
SQL> EXEC DBMS_MONITOR.session_trace_enable;
SQL> EXEC DBMS_MONITOR.session_trace_enable(waits=>TRUE, binds=>FALSE);
SQL> EXEC DBMS_MONITOR.session_trace_disable;

3.對其他使用者session跟蹤

首先從v$session中獲得sid和serial#, 然後:
SQL> EXEC DBMS_SYSTEM.set_sql_trace_in_session(sid=>123, serial#=>1234, sql_trace=>TRUE);
SQL> EXEC DBMS_SYSTEM.set_sql_trace_in_session(sid=>123, serial#=>1234, sql_trace=>FALSE);

SQL> EXEC DBMS_SYSTEM.set_ev(si=>123, se=>1234, ev=>10046, le=>8, nm=>' ');
SQL> EXEC DBMS_SYSTEM.set_ev(si=>123, se=>1234, ev=>10046, le=>0, nm=>' ');

SQL> @?/rdbms/admin/dbmssupp.sql   --DBMS_SUPPORT包需要單獨安裝,用sys使用者安裝
SQL> EXEC DBMS_SUPPORT.start_trace(sid=>123, serial=>1234, waits=>TRUE, binds=>FALSE);
SQL> EXEC DBMS_SUPPORT.stop_trace(sid=>123, serial=>1234);
也可以通過使用oradebug工具來設定10046事件, 首先通過V$PROCESS獲得該session的spid, 然後:
SQL> oradebug setospid 12345;
SQL> oradebug unlimit;
SQL> oradebug event 10046 trace name context forever, level 8;
SQL> oradebug event 10046 trace name context off;

在Oracle10g裡推薦使用DBMS_MONITOR:
SQL> EXEC DBMS_MONITOR.session_trace_enable(session_id=>1234, serial_num=>1234);
SQL> EXEC DBMS_MONITOR.session_trace_enable(session_id =>1234, serial_num=>1234, waits=>TRUE, binds=>FALSE);
SQL> EXEC DBMS_MONITOR.session_trace_disable(session_id=>1234, serial_num=>1234);
以下還能同時跟蹤多個session, client_id通過 DBMS_SESSION 包設定在 v$session 裡:
SQL> exec dbms_session.set_identifier('tim_hall');
SQL> select sid,serial#,username,client_identifier from v$session where client_identifier is not null;
SQL> EXEC DBMS_MONITOR.client_id_trace_enable(client_id=>'tim_hall');
SQL> EXEC DBMS_MONITOR.client_id_trace_enable(client_id=>'tim_hall', waits=>TRUE, binds=>FALSE);
SQL> EXEC DBMS_MONITOR.client_id_trace_disable(client_id=>'tim_hall');
以下還能同時跟蹤多個session, service_name, module, action columns通過 DBMS_APPLICATION_INFO 包設定在 v$session 裡:
SQL> EXEC DBMS_MONITOR.serv_mod_act_trace_enable(service_name=>'wending.lk', module_name=>'test_api', action_name=>'running');
SQL> EXEC DBMS_MONITOR.serv_mod_act_trace_enable(service_name=>'wending.lk', module_name=>'test_api', action_name=>'running', waits=>TRUE, binds=>FALSE);
SQL> EXEC DBMS_MONITOR.serv_mod_act_trace_disable(service_name=>'wending.lk', module_name=>'test_api', action_name=>'running');

三、獲取跟蹤檔案

trace檔名是SID_ora_xxxx.trc,其中xxxx是與Oracle連線的shadow程式的PID,SID是Oracle例項的ORACLE_SID。
檔案生成在Init.ORA引數user_dump_dest指定的目錄下。

1.使用oradebug

SQL> oradebug setmypid
SQL> oradebug tracefile_name
/opt/oracle/product/9.2.0/rdbms/log/uxdb_ora_9183.trc

2.設定初始引數TRACEFILE_IDENTIFIER

SQL> alter session set tracefile_identifier = 'MyTrace';
這樣在生成的trace檔名中會包含有MyTrace字樣:
/opt/oracle/product/9.2.0/rdbms/log/uxdb_ora_9183_MyTrace.trc

3.通過SQL查詢

SQL> select d.value||'/'||lower(rtrim(i.instance, chr(0)))||'_ora_'||p.spid||'.trc' trace_file_name
from
( select p.spid
from sys.v$mystat m,sys.v$session s,sys.v$process p
where m.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr) p,
( select t.instance from sys.v$thread t,sys.v$parameter v
where v.name = 'thread' and (v.value = 0 or t.thread# = to_number(v.value))) i,
( select value from sys.v$parameter where name = 'user_dump_dest') d;
/opt/oracle/db01/app/oracle/admin/ORCL/udump/orcl_ora_8066.trc

4. 修改生成跟蹤的檔名稱

啟用跟蹤後,就可以用新工具trcsess來生成trace檔案,先跳轉到udump目錄
$ cd $ORACLE_BASE/admin/$ORACLE_SID/udump
$ trcsess utput="test.trc" session=123.1234
其中session必須是SID.SERIAL#的格式, 開啟產生的test.trc檔案,會發現內面的內容實際上相當於10046和10053事件產生的trace檔案內容的組合。

四、用tkprof格式化trace檔案

常用:tkprof ORCL_ora_xxxx.trc ORCL_ora_yyyy.trc report.txt sys=no sort=fchela
tkprof是用來解釋trace檔案內容,把原始的trace檔案轉化為容易理解的檔案。使用方法為:  
tkprof trace檔名 報告檔名 [sort=option]
首先解釋輸出檔案中列的含義:
? CALL:每次SQL語句的處理都分成三個部分
Parse:這步將SQL語句轉換成執行計劃,包括檢查是否有正確的授權和所需要用到的表、列以及其他引用到的物件是否存在。
Execute:這步是真正的由Oracle來執行語句。對於insert、update、delete操作,這步會修改資料,對於select操作,這步就只是確定選擇的記錄。
Fetch:返回查詢語句中所獲得的記錄,這步只有select語句會被執行。
? COUNT:這個語句被parse、execute、fetch的次數。
? CPU:這個語句對於所有的parse、execute、fetch所消耗的cpu的時間,以秒為單位。
? ELAPSED:這個語句所有消耗在parse、execute、fetch的總的時間。
? DISK:從磁碟上的資料檔案中物理讀取的塊的數量。一般來說更想知道的是正在從快取中讀取的資料而不是從磁碟上讀取的資料。
? QUERY:在一致性讀模式下,所有parse、execute、fetch所獲得的buffer的數量。一致性模式的buffer是用於給一個長時間執行的事務提供一個一致性讀的快照,快取實際上在頭部儲存了狀態。
? CURRENT:在current模式下所獲得的buffer的數量。一般在current模式下執行insert、update、delete操作都會獲取buffer。在current模式下如果在快取記憶體區發現有新的快取足夠給當前的事務使用,則這些buffer都會被讀入了快取區中。
? ROWS: 所有SQL語句返回的記錄數目,但是不包括子查詢中返回的記錄數目。對於select語句,返回記錄是在fetch這步,對於insert、update、delete操作,返回記錄則是在execute這步。
sort引數是用來指定輸出的SQL是按什麼資料來排序(如cpu時間或elapsed時間,詳見tkprof的使用引數說明)  

在report.txt中有關於每個SQL的parse/execute/fetch/disk read/buffer get/cpu time/執行計劃(包括每一步執行時的行數),樣例如下:  
********************************************************************************
select owner#
from
obj$ o where obj# = :1
call     count       cpu    elapsed       disk      query    current        rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse        1      0.00       0.00          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        1      0.00       0.00          0          3          0           1
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total        3      0.00       0.00          0          3          0           1
Misses in library cache during parse: 1
Optimizer goal: CHOOSE
Parsing user id: SYS   (recursive depth: 1)
Rows     Row Source Operation
------- ---------------------------------------------------
      1 TABLE ACCESS BY INDEX ROWID OBJ$ (cr=3 r=0 w=0 time=24 us)
      1   INDEX UNIQUE SCAN I_OBJ1 (cr=2 r=0 w=0 time=12 us)(object id 33)
********************************************************************************

在report.txt檔案頭有各個資料的解釋,根據以下一些指標可以分析一下SQL的執行效能:  
(query+current)/rows 平均每行所需的block數,太大的話(超過20)SQL語句效率太低
Parse count/Execute count parse count應儘量接近1,如果太高的話,SQL會進行不必要的reparse。要檢查Pro*C程式的MAXOPENCURSORS是不是太低了,或不適當的使用的RELEASE_CURSOR選項  
rows Fetch/Fetch Fetch Array的大小,太小的話就沒有充分利用批量Fetch的功能,增加了資料在客戶端和伺服器之間的往返次數。在Pro*C中可以用prefetch=NN,Java/JDBC中可呼叫SETROWPREFETCH,在PL/SQL中可以用BULK COLLECT,SQLPLUS中的arraysize(預設是15)
disk/query+current 磁碟IO所佔邏輯IO的比例,太大的話有可能是db_buffer_size過小(也跟SQL的具體特性有關)
elapsed/cpu 太大表示執行過程中花費了大量的時間等待某種資源
cpu OR elapsed 太大表示執行時間過長,或消耗了大量的CPU時間,應該考慮優化
執行計劃中的Rows 表示在該處理階段所訪問的行數,要儘量減少
整合.trc檔案:
tkprof *.trc /file/ora_trc/ora_trc.txt explain=username/pwd sys=no insert=/file/ora_trc/insert.sql record=/file/ora_trc/record.txt aggregate=no waits=yes

tkprof的引數有下面幾個:  
explain=username/password -> connect to oracle and issue explain plain
talbe=schema.tablename -> use'schema.table' with explain option
aggregate=yes/no
insert=filename -> list sql statements and data inside insert statements
sys=no -> tkprof does not list sql statements run as user sys.
record=filename -> record non-recursive statements found in the trace file
print=integer -> list only the first 'integer' sql statements
sort=option -> set zero or more of the following sort options
option詳細引數:
Sort Option    Description
-------------- ------------------------------------------------
execnt        number of execute was called
execpu        cpu time spent executing
execu        number of buffers for current read during execute
exedsk        number of disk reads during execute
exeela        elapsed time executing
exemis        number of library cache misses during execute
exeqry        number of buffers for consistent read during execute
exerow        number of rows processed during execute
fchcnt        number of times fetch was called
fchcpu        cpu time spent fetching
fchcu        number of buffers for current read during fetch
fchdsk        number of disk reads during fetch
fchela        elapsed time fetching
fchqry        number of buffers for consistent read during fetch
fchrow        number of rows fetched
prscnt        number of times parse was called
prscpu        cpu time parsing
prscu        number of buffers for current read during parse
prsdsk        number of disk reads during parse
prsela        elapsed time parsing
prsmis        number of misses in library cache during parse
prsqry        number of buffers for consistent read during parse
userid        userid of user that parsed the cursor

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

相關文章