日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle 10046详解

發布時間:2024/8/26 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle 10046详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如果你對oracle性能調優很感興趣或者比較專長,那么你對oracle的10046事件一定不會陌生。10046event是oracle用于系統性能分析時的一個最重要的事件。當激活這個事件后,將通知oracle kernel追蹤會話的相關即時信息,并寫入到相應trace文件中。這些有用的信息主要包括sql是如何進行解析,綁定變量的使用情況,會話中發生的等待事件等

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


10046event的追蹤級別大致有:

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

level 4:包括變量的詳細信息

level 8:包括等待事件

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

其中,level 1相當于打開了sql_trace


10046event的啟用和關閉:

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

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

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

在滿足了上述條件后,就可以啟用10046event對會話進行后臺跟蹤了。


這里還有幾種方式來啟用10046event:

一種是在當前會話啟用event,可以利用alter session + 事件名稱 + level,

如:sql>alter session set event ‘10046 trace name context forever, level 12’;


另外一種是啟用別的會話進行event跟蹤,可以利用oracle提供的dbms_system來完成。

如:sql>exec dbms_system.set_ev(sid,serial#,10046,12,’’);


注意:

sql>exec dbms_system.set_sql_trace_in_session(sid,serial#,true);

相當于打開了sql_trace。


event的關閉:

可以在通過下面的語句來關閉當前會話的event:

sql>alter session set event ‘10046 trace name context off’;


也可以利用dbms_system包來關閉某個會話的event:

sql>execute dbms_system.set_ev(sid,serial#,0,’’);


這里應當值得一提的是,TRACE將消耗相當的系統資源,因此我們在使用TRACE的時候應當慎重。對于正式的系統,應當只在必要的時候進行TRACE操作,并且應當及時關閉。

當利用事件trace完當前或某個session后,接下來我們的工作就是找到oracle生成的trace了。Oracle的初始化文件中user_dump_dest參數的設置將決定trace文件的生成位置。


從trace文件中查找和發現有用的信息,然后尋找必要的性能調整點并進行相應的調整:

大部分情況下,通過10046事件trace到文件里的信息包含了此會話中存在的性能問題,可以根據trace到的等待事件、SQL語句執行情況以及綁定變量的使用情況來進行分析和查找。


oracle提供了一個工具tkprof來對trace文件進行格式的翻譯,以便trace文件中記錄的信息能夠被我們容易掌握和獲取。

基本用法:

?

tkprof tracefile outputfile [explain= ] [table= ] [print= ] [insert= ] [sys= ] [sort= ]
? ?table=schema.tablename? ?Use 'schema.tablename' with 'explain=' option.
? ?explain=user/password? ? Connect to ORACLE and issue EXPLAIN PLAIN.
? ?print=integer? ? List only the first 'integer' SQL statements.
? ?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.
? ?sort=option? ?? ?Set of zero or more of the following sort options:
? ???prscnt??number of times parse was called
? ???prscpu??cpu time parsing
? ???prsela??elapsed time parsing
? ???prsdsk??number of disk reads during parse
? ???prsqry??number of buffers for consistent read during parse

?

例:

C:>tkprof D:oracleadminora9iudumpora9i_ora_2060.trc d:report.txt
???
??? 執行完后,在reprot.txt中查詢剛才的語句內容如下:
? ? select count(*)
?? from
?? sys_dept
??
??
?? call???? count?????? cpu??? elapsed?????? disk????? query??? current??????? rows
?? ------- ------? -------- ---------- ---------- ---------- ----------? ----------
?? Parse??????? 1????? 0.00?????? 0.01????????? 1???????? 31????????? 0?????????? 0
?? Execute????? 1????? 0.00?????? 0.00????????? 0????????? 0????????? 0?????????? 0
?? Fetch??????? 1????? 0.00?????? 0.01????????? 5????????? 7????????? 0?????????? 1
?? ------- ------? -------- ---------- ---------- ---------- ----------? ----------
?? total??????? 3????? 0.00?????? 0.03????????? 6???????? 38????????? 0?????????? 1
? ?
?? Misses in library cache during parse: 1
?? Optimizer goal: CHOOSE
?? Parsing user id: 62? ???
??
?? 通過設置tkprof的關鍵字[EXPLAIN = <username/password>],也可以在跟蹤文件中增加SQL語句的執行計劃:
??C:>tkprof D:oracleadminora9iudumpora9i_ora_2060.trc d:report.txt explain=test/test;??
??
??********************************************************************************
??
??select count(*)
??from
?? sys_dept
??
??
??call???? count?????? cpu??? elapsed?????? disk????? query??? current??????? rows
??------- ------? -------- ---------- ---------- ---------- ----------? ----------
??Parse??????? 2????? 0.00?????? 0.01????????? 1???????? 31????????? 0?????????? 0
??Execute????? 2????? 0.00?????? 0.00????????? 0????????? 0????????? 0?????????? 0
??Fetch??????? 2????? 0.00?????? 0.01????????? 5???????? 14????????? 0?????????? 2
??------- ------? -------- ---------- ---------- ---------- ----------? ----------
??total??????? 6????? 0.00?????? 0.03????????? 6???????? 45????????? 0?????????? 2
??
??Misses in library cache during parse: 1
??Optimizer goal: CHOOSE
??Parsing user id: 62?
??
??Rows???? Row Source Operation
??-------? ---------------------------------------------------
??????? 1? SORT AGGREGATE
?????? 16?? TABLE ACCESS FULL SYS_DEPT

???

?

?

小知識:

檢查當前會話的sql_trace狀態或級別:

SQL>set serveroutput on

1 declare i_event number;

2 begin

? 3 sys.dbms_system.read_ev(10046,i_event);

? 4 dbms_output.put_line(‘the session sql_trace level is: ‘||i_event);

? 5 end;

6 /

the session sql_trace level is: 12


PL/SQL 過程已成功完成。

總結

以上是生活随笔為你收集整理的oracle 10046详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。