ORACLE中SQL TRACE和TKPROF的使用

regonly1發表於2008-05-30

ORACLE中SQL TRACE和TKPROF的使用

SQL TRACE 和 tkprof sql語句分析工具
 
一 SQL TRACE 使用方法:
  1.初始化sql trace
    引數:
      timed_statistics=true  允許sql trace 和其他的一些動態效能檢視收集與時間有關的引數、
      SQL>alter session set titimed_statistics=true
      max_dump_file_size=500 指定跟蹤檔案的大小
      SQL> alter system set max_dump_file_size=500;
      user_dump_dest  指定跟蹤檔案的路徑
      SQL> alter system set user_dump_dest=/oracle/oracle/diag/rdbms/orcl/orcl/trace;
   
  2.為一個session 啟動sql trace
    
     2.1命令方式
      alter session set sql_trace=true
     2.2 透過儲存過程啟動sqltrace
       select sid,serial#,osuser from v$session;
       SID    SERIAL# OSUSER
       168         1  oracle
 
       execute rdbms_system.set_sql_trace_in_session (168 ,1,true);
  3.停止一個sql trace 會話
      3.1 命令方式
       alter session set sql_trace=false
      3.2 儲存過程的方式
        execute rdbms_system.set_sql_trace_in_session (168 ,1,false);
  4. 為整個例項啟動SQL trace (一般消耗系統效能較高,不會用)
       alter system set sql_trace=true scope=spfile
     從新啟動資料庫
  5. 停止一個例項的sql trace
       alter system set sql_trace=flase scope=spfile
 
    啟動sql trace 之後收集的資訊包括
      1.解析、執行、返回資料的次數
      2.cpu和執行命令的時間
      3.物理讀和邏輯讀的次數
      4.系統處理的記錄數
      5.庫緩衝區錯誤
二 TKPROF的使用
     tkprof 的目的是將sql trace 生成的跟蹤檔案轉換成使用者可以理解的格式
    1. 格式
      tkprof inputfile outputfile [optional | parameters ]
    引數和選項:
     explain=user/password 執行explain命令將結果放在SQL trace的輸出檔案中
     table=schema.table 指定tkprof處理sql trace檔案時臨時表的模式名和表名
     insert=scriptfile 建立一個檔名為scriptfile的檔案,包含了tkprof存放的輸出sql語句
     sys=[yes/no] 確定系統是否列出由sys使用者產生或重調的sql語句
     print=number 將僅生成排序後的第一條sql語句的輸出結果
     record=recordfile 這個選項建立一個名為recorderfile的檔案,包含了所有重呼叫的sql語句
     sort=sort_option 按照指定的方法對sql trace的輸出檔案進行降序排序
             sort_option 選項
                prscnt  按解析次數排序
                prscpu  按解析所花cpu時間排序
                prsela  按解析所經歷的時間排序
                prsdsk  按解析時物理的讀操作的次數排序
                prsqry  按解析時以一致模式讀取資料塊的次數排序
                prscu   按解析時以當前讀取資料塊的次數進行排序
                execnt  按執行次數排序
                execpu  按執行時花的cpu時間排序
                exeela  按執行所經歷的時間排序
                exedsk  按執行時物理讀操作的次數排序
                exeqry  按執行時以一致模式讀取資料塊的次數排序
                execu   按執行時以當前模式讀取資料塊的次數排序
                exerow  按執行時處理的記錄的次數進行排序
                exemis  按執行時庫緩衝區的錯誤排序
                fchcnt  按返回資料的次數進行排序
                fchcpu  按返回資料cpu所花時間排序
                fchela  按返回資料所經歷的時間排序
                fchdsk  按返回資料時的物理讀操作的次數排序
                fchqry  按返回資料時一致模式讀取資料塊的次數排序
                fchcu   按返回資料時當前模式讀取資料塊的次數排序
                fchrow  按返回資料時處理的資料數量排序
三 sql trace 的輸出結果
         count:提供OCI過程的執行次數
         CPU:  提供執行CPU所花的時間單位是秒
         Elapsed:提供了執行時所花的時間。單位是秒。這個引數值等於使用者響應時間
         Disk:提供快取區從磁碟讀取的次數
         Query:以一致性模式從快取區獲得資料的次數
         Current:以當前模式從快取區獲得資料的次數
         ROWs: 返回撥用或執行呼叫時,處理的資料行的數量。
 
四:舉例:
         sql>alter session set sql_trace=true               
         SQL>select * from dba_users;
         SQL>show parameter user_dump_dest
         user_dump_dest     string  /oracle/oracle/diag/rdbms/orcl/orcl/trace
         SQL>exit
         cd /oracle/oracle/diag/rdbms/orcl/orcl/trace
         tkprof orcl_ora_11066.trc /oracle/oracle/trace1.out sys=yes
         vi trace.out

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

相關文章