10046 事件 與 10053 事件
有同學一直向Maclean反應希望做一期10046 SQL trace的教程, 正好這幾天有空 我們就理一理。
為什麼我們要使用10046 trace?
10046 trace幫助我們解析 一條/多條SQL、PL/SQL語句的執行狀態 ,這些狀態包括 :Parse/Fetch/Execute三個階段中遇到的等待事件、消耗的物理和邏輯讀、CPU時間、執行計劃等等。
即10046 為我們揭示了 一條/多條SQL 的執行情況, 對於 以點入手的 SQL調優是很好的輔助工具,特別是在 10g之前沒有ASH的情況下。 但整體系統調優 不是10046 所擅長的, 10046 是 效能調優的起釘器 , AWR是效能調優 的錘子。
10046還能幫助我們分析 一些 DDL維護命令的內部工作原理, RMAN、Data Pump Expdp/Impdp等工具的緩慢問題等, 是研究 oracle 資料庫原理的 居家旅行必備良品。
10046 和SQL TRACE的區別?
10046 比 SQL_TRACE引數提供更多的控制選項, 更詳細的內容輸出, 一般Maclean只用10046 而不用sql_trace
10046 和10053 的區別?
10053 是最常用的Oracle 最佳化器optimizer 跟蹤trace, 10053 可以作為我們解析 最佳化器為什麼選擇某個執行計劃,其中的理由的輔助工具,但並不告訴我們這個執行計劃 到底執行地如何。
而10046 並不解釋 optimizer最佳化器的工作, 但它同樣說明了在SQL解析parse階段所遇到的等待事件和所消耗的CPU等資源,以及Execute執行和Fetch階段的各項指標。
簡而言之10046 告訴我們SQL(執行計劃)執行地如何, 10053告訴我們 最佳化器為什麼為這個SQL選擇某個執行計劃。
10046 TRACE的LEVEL:
不同的Level 對應不同的跟蹤級別
- 1 啟用標準的SQL_TRACE功能 ( 預設) 包含了 SQL語句、響應時間、服務時間、處理的行數,物理讀和寫的數目、執行計劃以及其他一些額外資訊。 到版本10.2中 執行計劃寫入到 trace 的條件是僅當相關遊標 已經關閉時, 且與之相關的執行統計資訊是所有執行次數的總和資料。 到版本11.1中僅在每次遊標的第一次執行後將執行計劃寫入到trace , 執行統計資訊僅僅和這第一次執行相關
- 4 比level 1時多出 繫結變數的 trace
- 8 比level 1多出等待事件,特別對於9i中指出 latch free等待事件很有用,對於分析全表掃描和索引掃描也很有用
- 12 比level 1 多出 繫結變數和 等待事件
- 16 在11g中為每一次執行生成STAT資訊,僅在11.1之後可用
- 32 比level 1少執行計劃
- 64 和level 1 相比 在第一次執行後還可能生成執行計劃資訊 ; 條件是某個遊標在前一次執行的前提下 執行耗時變長了一分鐘。僅在 11.2.0.2中可用
- Level 28 (4 + 8 + 16) 代表 同時啟用 level 4 、level 8、level 16
- level 68 ( 64 + 4 ) 代表 同時啟用 level 64、level 4
設定的方法如下:
session 級別: alter session set events ’10046 trace name context forever,level X’;
system 級別 : alter system set events ’10046 trace name context forever,level X’;
針對非本會話的 某一個程式設定,如果你知道他的SPID 作業系統程式號
oradebug setospid SPID;
oradebug event 10046 trace name context forever, level X;
例如:
[oracle@vrh8 ~]$ ps -ef|grep LOCAL oracle 12421 12420 0 Aug21 ? 00:00:00 oracleG10R25 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))) oracle 12522 12521 0 Aug21 ? 00:00:00 oracleG10R25 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))) oracle 12533 1 0 Aug21 ? 00:00:00 oracleG10R25 (LOCAL=NO) oracle 15354 15353 0 Aug21 ? 00:00:08 oracleG10R25 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))) oracle 15419 15418 0 Aug21 ? 00:00:11 oracleG10R25 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))) oracle 16219 16218 0 Aug21 ? 00:00:00 oracleG10R25 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))) oracle 17098 17097 0 03:12 ? 00:00:00 oracleG10R25 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))) 要跟蹤 17098 這個程式 SQL> oradebug event 10046 trace name context forever, level 28; Statement processed. 從 sid 定位到 SPID 或者 ORAPID 的 查詢如下: SQL> select distinct sid from v$mystat; SID ---------- 141 SQL> select spid,pid from v$Process where addr=(select paddr from v$session where sid=141); SPID PID ------------ ---------- 17196 24 select spid,pid from v$Process where addr=(select paddr from v$session where sid=&SID) 如果只知道 ORA的PID 那麼也可以 oradebug setorapid 24; oradebug event 10046 trace name context forever, level 28;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31444259/viewspace-2137374/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 10053事件事件
- 【10053 事件】10053事件的跟蹤檔案解析事件
- Oracle 10053 事件Oracle事件
- ORACLEE 10053 事件Oracle事件
- Oracle 10053事件Oracle事件
- 解析10053事件事件
- 10046事件事件
- 10053事件初探.TXT事件
- 深入解析10053事件事件
- 10046事件概述事件
- 10046事件演示事件
- 10046事件(轉)事件
- oracle診斷事件及深入解析10053事件Oracle事件
- 【最佳化】10053事件事件
- ORACLE 深入解析10053事件Oracle事件
- 深入解析10053事件(ZT)事件
- oracle 10053診斷事件Oracle事件
- 10046事件詳解事件
- 設定10046事件事件
- 關於10046事件事件
- 10053事件處理步驟事件
- oracle中的10053事件命令Oracle事件
- sql_trace and 10046事件SQL事件
- 【原創】ORACLE 深入解析10053事件Oracle事件
- 深入理解Oracle除錯事件:10046事件詳解Oracle除錯事件
- Oracle SQL Trace 和 10046 事件OracleSQL事件
- Oracle SQL Trace 和10046 事件OracleSQL事件
- oracle event 10046 level_事件Oracle事件
- oracle 10046 事件使用方法Oracle事件
- 10046事件跟蹤會話sql事件會話SQL
- ORACLE 10046事件詳解-轉載Oracle事件
- 使用10046事件 +10704事件對索引線上重建的跟蹤事件索引
- 如何使用SQL_TRACE和10046事件SQL事件
- 在SQL*PLUS下使用10046事件例子SQL事件
- 啟用跟蹤事件10046---06事件
- 跟蹤SQL - SQL Trace 及 10046 事件SQL事件
- 查當前的10046 事件級別事件
- 事件流與事件溯源事件