溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

oracle中10046事件怎么用

發(fā)布時間:2021-11-10 09:27:32 來源:億速云 閱讀:456 作者:小新 欄目:關(guān)系型數(shù)據(jù)庫

這篇文章主要介紹oracle中10046事件怎么用,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

10046的 定義

      sql_trace/10046事件是oracle提供的用于進(jìn)行sql跟蹤的手段,其內(nèi)容包括sql的解析過程、sql的執(zhí)行計劃、綁定變量的使用、會話發(fā)生的等待事件。

10046生成語句方法:

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

現(xiàn)在隨便查詢一個什么,如:

select * from dba_users where rownum<20

查看trace文件

SQL> select * from v$diag_info;

里面有個Default Trace File

 1 Default Trace File

/u01/app/oracle/diag/rdbms/prod1/PROD1/trace/PROD1_ora_28613.trc

10g的話,show parameter dump;找udump

10046級別

目的:獲取sql、pl_sql等相關(guān)語句的執(zhí)行情況解析

10046級別:共4個級別 分別為0、1、4、8、12

       10046事件是SQL_TRACE的擴(kuò)展,被戲稱為"吃了興奮劑的SQL_TRACE"

       有效的追蹤級別:

       ① 0級:SQL_TRACE=FASLE

       ② 1級:SQL_TRACE=TRUE,這是缺省級別

       ③ 4級:1級+綁定變量

       ④ 8級:4級+等待事件

       ⑤ 12級:4級+8級

tkprof:oracle內(nèi)置的針對跟蹤文件格式化的一種工具

alter session set events '10046 trace name context forever, level 12';  --當(dāng)前會話啟用跟蹤

alter session set events '10046 trace name context off';  --關(guān)閉當(dāng)前會話跟蹤

select sid,serial#,username from v$session where username is not null;   --查詢sid和serial

execute dbms_system.set_ev(sid,serial#,10046,12,'');  --在當(dāng)前會話對其它會話進(jìn)行跟蹤

execute dbms_system.set_ev(sid,serial#,10046,0,'');  --在當(dāng)前會話關(guān)閉其它會話跟蹤

tkprof常用參數(shù)

tkprof   回車查看一下幫助  就知道怎么用了  tkprof 解析源追蹤文件  解析完成的文件 

filename 由SQL trace產(chǎn)生的輸入跟蹤文件

explain SQL語句的explain plain

recoed 創(chuàng)建非遞歸SQL語句的SQL腳本

waits 記錄等待事件的匯總

SORT 根據(jù)一個或多個項目提供分類數(shù)據(jù),如PRSCPU(CPU時間分析)、PRSELA(已用時間分析)等

table 定義表的名稱,TKPROF實用程序暫時將執(zhí)行計劃放入該表中

sys 啟用或禁用由sys給出的一組SQL語句

PRINT 僅列出指定數(shù)量的SQL語句,而不是所有的SQL語句

insert 創(chuàng)建存儲跟蹤數(shù)據(jù)庫信息的腳本

與10046相關(guān)的兩個參數(shù):

show parameter max_dump_file_size;

對trace文件的大小限制

show parameter timed_statistics;

對重要信息的收集是否開啟

10046怎么看?

tkprof文件都包含以下內(nèi)容:

  1. sql語句

  2. 分析 執(zhí)行 獲取調(diào)用的次數(shù)

  3. 被處理的行數(shù)

  4. 所使用CPU的秒數(shù)

  5. 所使用的IO

  6. 庫高速緩存未命中

  7. 可選的執(zhí)行計劃

  8. 行源 操作列表

  9. 一個報告,總結(jié)分析了在跟蹤文件中有多少相似和完全不同的語句,如果同樣的語句,parse列總是一個大值,說明沒有用上綁定變量

count    = number of times OCI procedure was executed。OCI為oracle的調(diào)用接口,提供了一組可對ORACLE數(shù)據(jù)庫進(jìn)行存取的接口子例程(函數(shù)),通過在第三代程序設(shè)計語言(如C語言)中進(jìn)行調(diào)用可達(dá)到存取ORACLE數(shù)據(jù)庫的目的。

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 為了一致性讀獲得的空間。

在一致性讀模式下,所有parse、execute、fetch所獲得的buffer的數(shù)量。一致性模式的buffer是用于給一個長時間運(yùn)行的事務(wù)提供一個一致性讀的快照,緩存實際上在頭部存儲了狀態(tài)。

current  = number of buffers gotten in current mode (usually for update) 數(shù)據(jù)庫塊命中的次數(shù),通常是為了update

在current模式下所獲得的buffer的數(shù)量。一般在current模式下執(zhí)行insert、update、delete操作都會獲取buffer。

rows     = number of rows processed by the fetch or execute call 每一種調(diào)用類型所處理的行的總數(shù)

還有這些:

Misses in library cache during parse:發(fā)生在解析的硬解析數(shù)量,如果是軟解析則Misses in library cache during parse將為0

Misses in library cache during execute:發(fā)生在執(zhí)行調(diào)用階段的硬解析數(shù)量。如果在執(zhí)行調(diào)用時沒有硬解析發(fā)生,Misses in library cache during execute這一行將不存在。

重點(diǎn)參考:http://czmmiao.iteye.com/blog/1493765

分析下面一段代碼:

SQL ID: 00fqk94bdzqnj Plan Hash: 644658511

select sid,serial#,username

from

 v$session where username is not null

call     count①       cpu    elapsed       disk      query    current        rows

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

Parse        1      0.01       0.01          0          0          0           0

Execute      1      0.00       0.00          0          0          0           0

Fetch        2      0.00       0.00          0          0          0           2

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

total        4      0.01       0.01          0②          0          0           2

Misses in library cache during parse: 1

Optimizer mode: ALL_ROWS

Parsing user id: SYS

Number of plan statistics captured: 1

①假設(shè)count這列,fetch部分執(zhí)行了17324次,獲得的rows行數(shù)是259806,兩者相除,就可以得出一次獲取,能夠獲取多少行記錄,一次獲得15行數(shù)據(jù),懷疑是用了數(shù)組取操作。

②理論上,elapsed time=CPU time+disk time,即如果elapsed time為1.85,CPU為1.82,那么disk可能就是3。但是也可能是有等待事件,把大量時間花在了等待事件上。

③可以通過磁盤IO所占邏輯IO的比例,disk/query+current來判斷磁盤IO的情況,太大的話有可能是db_buffer_size過小,當(dāng)然這也跟SQL的具體特性有關(guān)

④query+current/rows 平均每行所需的block數(shù),太大的話(超過20)SQL語句效率太低,數(shù)據(jù)過于分散,可以考慮重組對象

⑤通過SQL ID: 06nvwn223659v Plan Hash: 0 標(biāo)識出一個新的SQL分析,會發(fā)現(xiàn)很多是系統(tǒng)自己的SQL,直接不用看

以上是“oracle中10046事件怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI