熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

ORACLE10046事件詳解

2013-11-13 16:12:29  來源: Oracle 

  Oracle的事件可以跟蹤應用程序所執行的SQL語句並且得到其解析次數執行次數CPU使用時間等信息這對我們分析定位數據庫性能問題是非常有用的

  event是oracle用於系統性能分析時的一個最重要的事件當激活這個事件後將通知oracle kernel追蹤會話的相關即時信息並寫入到相應trace文件中這些有用的信息主要包括sql是如何進行解析綁定變量的使用情況會話中發生的等待事件等

  event 可分成不同的級別(level)分別追蹤記錄不同程度的有用信息對於這些不同的級別應當注意的是向下兼容的即高一級的trace信息包含低於此級的所有信息

  event的追蹤級別大致有

  level :跟蹤sql語句包括解析執行提取提交和回滾等

  level :包括變量的詳細信息

  level :包括等待事件

  level :包括綁定變量與等待事件

  其中level 相當於打開了sql_trace

  前提條件

  (先確保要event的會話環境符合條件)

  必須確保timed_statistics為TRUE這個參數可以在會話級上進行修改

  為了確保trace輸出能夠完整進行還要調整此會話對trace文件大小的限制一般將此限制取消即將max_dump_file_size設置為UNLIMITED或者設置為一個很大的阙值

  在滿足了上述條件後就可以啟用event對會話進行後台跟蹤了

  首先獲得spidsidserial#machine為連接oracle的機器名

  select bspidasidaserial#amachine from v$session av$process b where apaddr =baddr  and asid =

  繼續往下看就可以知道為什麼找到SPID了

  事件啟動需要SYSDBA權限

  SQL>execute sysdbms_systemset_ev(

  PL/SQL procedure successfully completed

  參數說明

  :SID

  :SERIAL#

  注意這裡必須以sysdba登錄

  或者會話級別的跟蹤

  SQL> alter session set events trace name context forever level ;

  會話已更改

  在應用程序中執行對數據庫的操作

  比如性能較差的一些查詢插入刪除操作等

  事件的關閉

  SQL>execute sysdbms_systemset_ev(

  PL/SQL procedure successfully completed

  或者對應上面的在會話級別關閉

  SQL> alter session set events trace name context off ;

  會話已更改

  獲得產生的跟蹤文件所在的目錄

  SQL> select value from v$parameter where name = user_dump_dest;

  轉到該目錄下可以看到生成了一個zftang_ora_trc文件此處的即SPID的值

  使用tkprof命令轉換TRC文件

  在命令行下執行oracle的tkprof命令將zftang_ora_trc轉化為文本文件

  如

  $ tkprof  orai_ora_trc orai_ora_sql

  tkprof /u/diag/rdbms/bysrac/bysrac/trace/bysrac_ora__TEST_trc /home/oracle/test_trc

  此時在zftang_ora_sql文件中就可以看到剛才執行應用程序時所執行的sql語句的執行次數CPU使用時間等數據

  TRACE將消耗相當的系統資源因此我們在使用TRACE的時候應當慎重對於正式的系統應當只在必要的時候進行TRACE操作並且應當及時關閉

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

  count    = number of times OCI procedure was executed

  cpu      = cpu time in seconds executing

  elapsed  = elapsed time in seconds executing

  disk     = number of physical reads of buffers from disk

  query    = number of buffers gotten for consistent read

  current  = number of buffers gotten in current mode (usually for update)

  rows     = number of rows processed by the fetch or execute call

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

  update test_ set flag = 測試

  call     count       cpu    elapsed       disk      query    current        rows

      

  Parse                                                             

  Execute                                             

  Fetch                                                             

      

  total                                               

  Misses in library cache during parse:

  Optimizer mode: ALL_ROWS

  Parsing user id:

  timed_statistics的理解

  關於參數timed_statistics的一段解說

  Without timed statistics Oracle records the reason for each wait before it begins to wait and when the wait is over it records whether it timed out But with timed statistics enabled Oracle checks the time just before and after each wait and also records the time waited The time waited is recorded in hundredths of a second that is centiseconds

  本人的理解是參數timed_statistics沒有設置的話Oracle只記錄wait開始和wait結束這一段時間內的wait reason和wait結束是否是因為timed out而設置timed_statistics=true後Oracle就記錄了wait的時間信息有了這些時間信息可以確定等待事件在哪個時間段出現比較頻繁   請指正

  在timed_statistics  = false時我們只能夠知道這些等待時間的次數(records the reason for each wait ) 以及等待時間timed out的次數(records whether it timed out)

  在timed_statistics = true時我們可以知道系統在某個具體的等待事件上等待的時間(records the time waited)這樣我們就可以判斷具體是什麼原因導致我們的系統變慢或者…


From:http://tw.wingwit.com/Article/program/Oracle/201311/17966.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.