您好,登錄后才能下訂單哦!
這篇文章主要介紹oracle中10046事件怎么用,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
sql_trace/10046事件是oracle提供的用于進行sql跟蹤的手段,其內容包括sql的解析過程、sql的執行計劃、綁定變量的使用、會話發生的等待事件。
SQL> alter session set events '10046 trace name context forever,level 12';
現在隨便查詢一個什么,如:
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
目的:獲取sql、pl_sql等相關語句的執行情況解析
10046級別:共4個級別 分別為0、1、4、8、12
10046事件是SQL_TRACE的擴展,被戲稱為"吃了興奮劑的SQL_TRACE"
有效的追蹤級別:
① 0級:SQL_TRACE=FASLE
② 1級:SQL_TRACE=TRUE,這是缺省級別
③ 4級:1級+綁定變量
④ 8級:4級+等待事件
⑤ 12級:4級+8級
tkprof:oracle內置的針對跟蹤文件格式化的一種工具
alter session set events '10046 trace name context forever, level 12'; --當前會話啟用跟蹤
alter session set events '10046 trace name context off'; --關閉當前會話跟蹤
select sid,serial#,username from v$session where username is not null; --查詢sid和serial
execute dbms_system.set_ev(sid,serial#,10046,12,''); --在當前會話對其它會話進行跟蹤
execute dbms_system.set_ev(sid,serial#,10046,0,''); --在當前會話關閉其它會話跟蹤
tkprof 回車查看一下幫助 就知道怎么用了 tkprof 解析源追蹤文件 解析完成的文件
filename 由SQL trace產生的輸入跟蹤文件
explain SQL語句的explain plain
recoed 創建非遞歸SQL語句的SQL腳本
waits 記錄等待事件的匯總
SORT 根據一個或多個項目提供分類數據,如PRSCPU(CPU時間分析)、PRSELA(已用時間分析)等
table 定義表的名稱,TKPROF實用程序暫時將執行計劃放入該表中
sys 啟用或禁用由sys給出的一組SQL語句
PRINT 僅列出指定數量的SQL語句,而不是所有的SQL語句
insert 創建存儲跟蹤數據庫信息的腳本
show parameter max_dump_file_size;
對trace文件的大小限制
show parameter timed_statistics;
對重要信息的收集是否開啟
tkprof文件都包含以下內容:
sql語句
分析 執行 獲取調用的次數
被處理的行數
所使用CPU的秒數
所使用的IO
庫高速緩存未命中
可選的執行計劃
行源 操作列表
一個報告,總結分析了在跟蹤文件中有多少相似和完全不同的語句,如果同樣的語句,parse列總是一個大值,說明沒有用上綁定變量
count = number of times OCI procedure was executed。OCI為oracle的調用接口,提供了一組可對ORACLE數據庫進行存取的接口子例程(函數),通過在第三代程序設計語言(如C語言)中進行調用可達到存取ORACLE數據庫的目的。
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的數量。一致性模式的buffer是用于給一個長時間運行的事務提供一個一致性讀的快照,緩存實際上在頭部存儲了狀態。
current = number of buffers gotten in current mode (usually for update) 數據庫塊命中的次數,通常是為了update
在current模式下所獲得的buffer的數量。一般在current模式下執行insert、update、delete操作都會獲取buffer。
rows = number of rows processed by the fetch or execute call 每一種調用類型所處理的行的總數
還有這些:
Misses in library cache during parse:發生在解析的硬解析數量,如果是軟解析則Misses in library cache during parse將為0
Misses in library cache during execute:發生在執行調用階段的硬解析數量。如果在執行調用時沒有硬解析發生,Misses in library cache during execute這一行將不存在。
重點參考: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
①假設count這列,fetch部分執行了17324次,獲得的rows行數是259806,兩者相除,就可以得出一次獲取,能夠獲取多少行記錄,一次獲得15行數據,懷疑是用了數組取操作。
②理論上,elapsed time=CPU time+disk time,即如果elapsed time為1.85,CPU為1.82,那么disk可能就是3。但是也可能是有等待事件,把大量時間花在了等待事件上。
③可以通過磁盤IO所占邏輯IO的比例,disk/query+current來判斷磁盤IO的情況,太大的話有可能是db_buffer_size過小,當然這也跟SQL的具體特性有關
④query+current/rows 平均每行所需的block數,太大的話(超過20)SQL語句效率太低,數據過于分散,可以考慮重組對象
⑤通過SQL ID: 06nvwn223659v Plan Hash: 0 標識出一個新的SQL分析,會發現很多是系統自己的SQL,直接不用看
以上是“oracle中10046事件怎么用”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。