中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

oracle中10046事件怎么用

發布時間:2021-11-10 09:27:32 來源:億速云 閱讀:464 作者:小新 欄目:關系型數據庫

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

10046的 定義

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

10046生成語句方法:

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

10046級別

目的:獲取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   回車查看一下幫助  就知道怎么用了  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 創建存儲跟蹤數據庫信息的腳本

與10046相關的兩個參數:

show parameter max_dump_file_size;

對trace文件的大小限制

show parameter timed_statistics;

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

10046怎么看?

tkprof文件都包含以下內容:

  1. sql語句

  2. 分析 執行 獲取調用的次數

  3. 被處理的行數

  4. 所使用CPU的秒數

  5. 所使用的IO

  6. 庫高速緩存未命中

  7. 可選的執行計劃

  8. 行源 操作列表

  9. 一個報告,總結分析了在跟蹤文件中有多少相似和完全不同的語句,如果同樣的語句,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事件怎么用”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

嘉义县| 政和县| 琼海市| 行唐县| 深州市| 米脂县| 延川县| 尼木县| 津市市| 瓦房店市| 井陉县| 扎囊县| 明溪县| 云龙县| 卢氏县| 澄城县| 建阳市| 浠水县| 黄龙县| 沁源县| 克东县| 浦城县| 德安县| 宁阳县| 建始县| 漳浦县| 山东省| 高碑店市| 连云港市| 铅山县| 福州市| 西城区| 延长县| 龙口市| 怀来县| 五家渠市| 高邑县| 简阳市| 吴川市| 嘉善县| 乃东县|