10046诊断事件——跟踪SQL语句!
2011-11-01 16:39
405 查看
10046事件并不是oracle官方提供给用户的使用命令,但是使用非常的广泛。它比sql_trace能够获得更多的信息。10046事件分成4个级别:
level 1:等同于sql_trace的功能。
level 4:在level 1的基础上增加收集绑定变量的信息。
level 8:在level 1的基础上增加等待事件的信息。
level 12:等同于level 4 + level 8。即同事收集绑定变量的信息和等待事件信息。
level 4:
截取trace文件中的一段来说明,
Bind#0表示第一个变量,最后的value=20是变量的值。
Bind#1表示第二个变量,最后的value="T"是变量的值。
level 8:
还是截取一段来说明,
SQL*Net message to client:客户端等待服务器的反馈信息。
QLS*Net message from client:服务器等待客户端的请求。
因为我们发出的sql数据量很小,所以说看到的等待事件基本上都是消息在客户端和服务器端传递时的等待。
level 12:
level 1:等同于sql_trace的功能。
level 4:在level 1的基础上增加收集绑定变量的信息。
level 8:在level 1的基础上增加等待事件的信息。
level 12:等同于level 4 + level 8。即同事收集绑定变量的信息和等待事件信息。
level 4:
SQL> select spid from v$process where addr = (select paddr from v$session where sid = (select sid from v$mystat where rownum = 1)); SPID ------------ 3992 SQL> alter session set events '10046 trace name context forever,level 4'; 会话已更改。 SQL> variable x number; SQL> variable y varchar2; SQL> exec :x:=20; PL/SQL 过程已成功完成。 SQL> exec :y:='T'; PL/SQL 过程已成功完成。 SQL> select * from t where object_id = :x or object_name = :y; OWNER ------------------------------ OBJECT_NAME -------------------------------------------------------------------------------- SUBOBJECT_NAME OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE ------------------------------ ---------- -------------- ------------------- CREATED LAST_DDL_TIME TIMESTAMP STATUS T G S -------------- -------------- ------------------- ------- - - - SYS ICOL$ 20 2 TABLE 17-2月 -08 17-2月 -08 2008-02-17:01:50:56 VALID N N N OWNER ------------------------------ OBJECT_NAME -------------------------------------------------------------------------------- SUBOBJECT_NAME OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE ------------------------------ ---------- -------------- ------------------- CREATED LAST_DDL_TIME TIMESTAMP STATUS T G S -------------- -------------- ------------------- ------- - - - U1 T 52968 52970 TABLE 28-10月-11 28-10月-11 2011-10-28:20:28:56 VALID N N N SQL> alter session set events '10046 trace name context off'; 会话已更改。
截取trace文件中的一段来说明,
Bind#0表示第一个变量,最后的value=20是变量的值。
Bind#1表示第二个变量,最后的value="T"是变量的值。
===================== PARSING IN CURSOR #1 len=56 dep=0 uid=65 oct=3 lid=65 tim=1288935229855385 hv=446894842 ad='29a77058' select * from t where object_id = :x or object_name = :y END OF STMT PARSE #1:c=3000,e=3260,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,tim=1288935229855375 BINDS #1: kkscoacd Bind#0 oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00 oacflg=03 fl2=1000000 frm=00 csi=00 siz=56 off=0 kxsbbbfp=b7e45de8 bln=22 avl=02 flg=05 value=20 Bind#1 oacdty=01 mxl=32(01) mxlc=00 mal=00 scl=00 pre=00 oacflg=03 fl2=1000000 frm=01 csi=852 siz=0 off=24 kxsbbbfp=b7e45e00 bln=32 avl=01 flg=01 value="T" EXEC #1:c=6000,e=5759,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,tim=1288935229861529 FETCH #1:c=1000,e=909,p=0,cr=9,cu=0,mis=0,r=1,dep=0,og=1,tim=1288935229862509 FETCH #1:c=28996,e=28807,p=0,cr=723,cu=0,mis=0,r=1,dep=0,og=1,tim=1288935229893303 STAT #1 id=1 cnt=2 pid=0 pos=1 obj=52968 op='TABLE ACCESS FULL T (cr=732 pr=0 pw=0 time=1275 us)' =====================
level 8:
SQL> select spid from v$process where addr = (select paddr from v$session where sid = (select sid from v$mystat where rownum = 1)); SPID ------------ 4037 SQL> alter session set events '10046 trace name context forever,level 8'; 会话已更改。 SQL> select * from t where object_id = 100; OWNER ------------------------------ OBJECT_NAME -------------------------------------------------------------------------------- SUBOBJECT_NAME OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE ------------------------------ ---------- -------------- ------------------- CREATED LAST_DDL_TIME TIMESTAMP STATUS T G S -------------- -------------- ------------------- ------- - - - SYS I_TYPED_VIEW1 100 100 INDEX 17-2月 -08 17-2月 -08 2008-02-17:01:50:58 VALID N N N SQL> alter session set events '10046 trace name context off'; 会话已更改。
还是截取一段来说明,
SQL*Net message to client:客户端等待服务器的反馈信息。
QLS*Net message from client:服务器等待客户端的请求。
因为我们发出的sql数据量很小,所以说看到的等待事件基本上都是消息在客户端和服务器端传递时的等待。
===================== PARSING IN CURSOR #2 len=37 dep=0 uid=65 oct=3 lid=65 tim=1288936051913775 hv=556034074 ad='29aafa1c' select * from t where object_id = 100 END OF STMT PARSE #2:c=1000,e=1076,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,tim=1288936051913763 EXEC #2:c=0,e=94,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,tim=1288936051913962 WAIT #2: nam='SQL*Net message to client' ela= 3 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1288936051914040 FETCH #2:c=6998,e=6507,p=0,cr=552,cu=0,mis=0,r=1,dep=0,og=1,tim=1288936051920586 WAIT #2: nam='QLS*Net message from client' ela= 1330 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1288936051922002 FETCH #2:c=3000,e=2496,p=0,cr=180,cu=0,mis=0,r=0,dep=0,og=1,tim=1288936051924571 WAIT #2: nam='SQL*Net message to client' ela= 2 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1288936051925338 WAIT #2: nam='SQL*Net message from client' ela= 9587914 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1288936061513284 STAT #2 id=1 cnt=1 pid=0 pos=1 obj=52968 op='TABLE ACCESS FULL T (cr=732 pr=0 pw=0 time=6497 us)' =====================使用tkprof工具处理这个trace文件,可以看见多了如下内容
Elapsed times include waiting on following events: Event waited on Times Max. Wait Total Waited ---------------------------------------- Waited ---------- ------------ SQL*Net message to client 3 0.00 0.00 SQL*Net message from client 3 11.18 20.77
level 12:
SQL> select spid from v$process where addr = (select paddr from v$session where sid = (select sid from v$mystat where rownum = 1)); SPID ------------ 4067 SQL> alter session set events '10046 trace name context forever,level 12'; 会话已更改。 SQL> variable x number; SQL> variable y varchar2; SQL> exec :x:=20; PL/SQL 过程已成功完成。 SQL> exec :y:='T'; PL/SQL 过程已成功完成。 SQL> select * from t where object_id = :x or object_name = :y; OWNER ------------------------------ OBJECT_NAME -------------------------------------------------------------------------------- SUBOBJECT_NAME OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE ------------------------------ ---------- -------------- ------------------- CREATED LAST_DDL_TIME TIMESTAMP STATUS T G S -------------- -------------- ------------------- ------- - - - SYS ICOL$ 20 2 TABLE 17-2月 -08 17-2月 -08 2008-02-17:01:50:56 VALID N N N OWNER ------------------------------ OBJECT_NAME -------------------------------------------------------------------------------- SUBOBJECT_NAME OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE ------------------------------ ---------- -------------- ------------------- CREATED LAST_DDL_TIME TIMESTAMP STATUS T G S -------------- -------------- ------------------- ------- - - - U1 T 52968 52970 TABLE 28-10月-11 28-10月-11 2011-10-28:20:28:56 VALID N N N SQL> alter session set events '10046 trace name context off';可以看见,level 12就是level 4 + level 8。不再多说。
===================== PARSING IN CURSOR #2 len=56 dep=0 uid=65 oct=3 lid=65 tim=1288936586180240 hv=446894842 ad='29a77058' select * from t where object_id = :x or object_name = :y END OF STMT PARSE #2:c=0,e=108,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,tim=1288936586180234 BINDS #2: kkscoacd Bind#0 oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00 oacflg=03 fl2=1000000 frm=00 csi=00 siz=56 off=0 kxsbbbfp=b7fa8bc8 bln=22 avl=02 flg=05 value=20 Bind#1 oacdty=01 mxl=32(01) mxlc=00 mal=00 scl=00 pre=00 oacflg=03 fl2=1000000 frm=01 csi=852 siz=0 off=24 kxsbbbfp=b7fa8be0 bln=32 avl=01 flg=01 value="T" EXEC #2:c=1000,e=691,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,tim=1288936586180998 WAIT #2: nam='SQL*Net message to client' ela= 3 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1288936586181039 FETCH #2:c=0,e=279,p=0,cr=9,cu=0,mis=0,r=1,dep=0,og=1,tim=1288936586181351 WAIT #2: nam='SQL*Net message from client' ela= 1524 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1288936586182920 WAIT #2: nam='SQL*Net message to client' ela= 6 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1288936586186159 FETCH #2:c=11998,e=12518,p=0,cr=723,cu=0,mis=0,r=1,dep=0,og=1,tim=1288936586195476 WAIT #2: nam='SQL*Net m
相关文章推荐
- 使用oracle的10046事件跟踪SQL语句
- 使用oracle的10046事件跟踪SQL语句
- 保护SQL语句不被Sql Profiler / 事件探查器 捕获跟踪到
- 保护SQL语句不被Sql Profiler / 事件探查器 捕获跟踪到 (SQL2000)
- 保护SQL语句不被Sql Profiler / 事件探查器 捕获跟踪到
- SQL Tuning 基础概述03 - 使用sql_trace和10046事件跟踪执行计划
- ORACLE追踪应用执行sql语句——10046事件
- SQL优化及性能诊断(10046事件/tkprof)
- 保护SQL语句不被Sql Profiler / 事件探查器 捕获跟踪到
- Oracle SQL Trace 和 10046 事件跟踪
- 保护SQL语句不被Sql Profiler / 事件探查器 捕获跟踪到<转>
- 10046事件跟踪会话sql
- 演示使用sql_trace和10046事件对其他会话进行跟踪,并给出trace结果
- SQL诊断------10046事件
- 10046事件跟踪会话sql
- Oracle执行语句跟踪(2)——使用10046事件实现语句追踪
- 10046 level 12 跟踪一个秀逗的SQL语句
- 跟踪会话session或诊断事件10046
- 演示使用sql_trace和10046事件对其他会话进行跟踪,并给出trace结果
- 通过SQL Server的扩展事件来跟踪SQL语句在运行时,时间都消耗到哪儿了?