tkprof

 1.設置sql trace

  (1)實例級

  初始化參數據SQL_TRACE=TRUE

  (2)對話級

  ALTER SESSION SET SQL_TRACE=TRUE

  DBMS_SESSION.SQL_TRACE(SQL_TRACE)

  DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(SID,SERIAL#,S QL_TRACE);

  (3).trc文件存放的位置

  查看初始化參數:用戶跟蹤文件user_dump_dest

  2.設置時間統計(這樣就可以統計每個sql執行的時間)

  alter system set timed_statistics=true scope=both;

  3.tkprof的使用

  tkprof可對.trc文件進行分析,並天生一個分析文件.並且在分析.trc文件,天生分析文件時按各種選項進行排序,其中比較有用的一個排序選項是fchela,即按照elapsed time fetching來對分析的結果排序(記住要設置初始化參數time_statistics=true),天生的.prf文件將把最消耗時間的sql放在最前面顯示。另外一個有用的參數就是sys,這個參數設置爲no可以阻止所有以sys用戶執行的sql被顯示出來,這樣可以減少分析出來的文件的複雜度,便於查看。

  舉例:

  (1)設置跟蹤SID,SERIAL#O爲12.73

  exec dbms_system.SET_SQL_TRACE_IN_SESSION(12,73,true);

  (2)查詢天生的.trc文件號

  select spid from v$process where addr = (select paddr from v$session where sid=12);

  (3)使用tkprof天生分析文件

  c:\>tkprof e:\oracle\admin\rainny\rainny_ora_4188.trc c:\rainny.prf aggregate=yes sys=no sort=fchela(此例中將執行最耗時的sql放在分析文件的開頭)

  (4)打開.prf文件

  可用ultraedit打開查看天生的分析文件

  1.Tkprof是一個分析ORACLE跟蹤文件並且產生一個更加人性化清楚的輸出結果的可執行工具。C:\oracle\ora92\bin\tkprof.exe

  2. tkprof 全稱

  參考信息

  .itpub./showthread.php?s=cbfea4845ef5 b2a3f4adb00de0de9317&threadid=&highlight=tkpr of

  3. 基本的使用步驟

  1) SQL> alter system set timed_statistics=true;

  2) 用戶級自跟蹤:

  SQL>ALTER SESSION SET SQL_TRACE=TRUE;

  SQL>ALTER SESSION SET SQL_TRACE=FALSE;

  用戶級DBA跟蹤:(例如sys跟蹤test,需要用sysdba登錄)

  a). SQL>select s.USERNAME,s.SID,s.SERIAL#,s.COMMAND from v$session s

  where s.USERNAME='COLM' ;

  b). SQL>exec sys.dbms_system.set_sql_trace_in_session(9,7,true) ;

  c). SQL>exec sys.dbms_system.set_sql_trace_in_session(9,7,false );

  ps:9爲SID,7爲SERIAL#

  3) C:> cd C:\oracle\admin\COLM\udump

  4) C:\oracle\admin\COLM\udump> tkprof colm_ora_2056.trc trace.txt print=100 record=sql.txt sys=no

  5) 查看trace.txt文件

  範例:

  ************************************************** *****************************

  SELECT *

  FROM

  col_case

  call count cpu elapsed disk query current rows

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

  Parse 1 0.00 0.00 0 0 0 0

  Execute 0 0.00 0.00 0 0 0 0

  Fetch 0 0.00 0.00 0 0 0 0

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

  total 1 0.00 0.00 0 0 0 0

  Misses in library cache during parse: 1

  Optimizer goal: CHOOSE

  Parsing user id: 62 需要調整的語句符合以下幾點:(1).CPU佔用過多(2).Parse,Execute,Fetch花費太多時間(3).DISK讀取太多,query/current(SGA)中數據塊讀取太少(4).訪問很多塊,只返回2行

  首先解釋輸出文件中列的含義:

  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/執行計劃(包括每一步運行時的行數),

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章