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_trace10046 和10053 的区别?10053 是最常用的Oracle 优化器optimizer 跟踪trace, 10053 可以作为我们解析 优化器为什么选择某个执行计划,其中的理由的辅助工具,但并不告诉我们这个执行计划 到底运行地如何。而10046 并不解释 optimizer优化器的工作, 但它同样说明了在SQL解析parse阶段所遇到的等待事件和所消耗的CPU等资源,以及Execute执行和Fetch阶段的各项指标。简而言之10046 告诉我们SQL(执行计划)运行地如何, 10053告诉我们 优化器为什么为这个SQL选择某个执行计划。10046 TRACE的LEVEL:不同的Level 对应不同的跟踪级别设置的方法如下: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;例如:10046 trace 示例解析这里我们引入一个全表扫描的10046例子 并解析该例子中的TRACE信息:PARSING IN CURSOR #20 len=44dep=0 uid=0 ct=3 lid=0 tim=1344883874047619 hv=2241892608 ad=’a7902a08′
select count(*) from fullscan where wner=:v
END OF STMT
PARSE #20:c=2000,e=1087,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,tim=1344883874047610PARSING IN CURSOR #20 ,这里的#20是游标号, 这个游标号非常重要, 后面的 FETCH 、WAIT、EXECUTE、PARSE 都通过这个游标号和前面的SQL联系起来。
意可以看到 在执行PARSING IN CURSOR #20 后 ,PARSE #20之后没有紧跟着 #20游标的运行 ,而是跟了
#25、#26游标的运行情况, 仔细看一下 #25和#26他们是 系统递归的recursive SQL ,这些递归SQL由
用户的SQL触发,一般来说是查一些数据字典基表例如 obj$、tab$等,常规情况下 递归SQL运行消耗的资源和时间都非常少。
LEN=44 指SQL的长度OCT=3 Oracle command type 指Oracle中命令分类的类型 可以通过 V$SQL.COMMAND_TYPE获得对应关系11g中提供了 V$SQLCOMMAND 视图可以看到完整的对照列表,http://www.askmaclean.com/archives/vsqlcommand-sql-opcodes-and-names.htmlLID=0 权限用户ID Privilege user id.TIM
timestamp 一个时间戳, 在9i之前 这个指标的单位是 1/100 s 即 10ms 。 到9i以后单位为 1/1000000
的microsecond 。 这个时间戳可以用来判断 trace中2个点的时间差。 这个
TIm的值来自于V$TIMER视图,这个视图是Oracle内部计时用的。DEP=0 代表该SQL的递归深入(recursive depth),因为递归SQL可能再引发下一层的递归SQL, 如果DEP=0则说明不是递归SQL,如果DEP>0则说明是递归SQL。UID=0 UID即USERID 用以标明是谁在解析这个游标, 如果是0则说明是SYS 用户, 具体 用户名和UID对应可以通过如下查询获得:select user#,name from user$;OG=1 OG 代表optimizer_mode ,具体对应关系见下表mis=0
该指标说明library cache未发生miss,则本次解析 我们没有需要硬解析 而是采用软解析或者更好的方式。
硬解析在Oracle中成本是很高的。 注意由于在任何阶段包括PARSE/EXECUTE/FETCH阶段都可能发生游标被age
out的现象,所以在这些阶段都会打印mis指标。如果mis>0则说明可能发生了硬解析。
HV 代表这个SQL 的hash value , 10g之前没有SQL_ID 时 主要靠HASH VALUE 来定位一个SQLAD 代表SQLTEXT 的地址 来源于 V$SQLAREA.ADDRESSerr 代表 Oracle错误代码 例如ORA-1555PARSE 是SQL运行的第一个阶段,解析SQLEXEC 是SQL运行的第二个阶段,运行已经解析过的语句FETCH 从游标中 fetch数据行UNMAP 是当游标使用临时表时,若游标关闭则使用UNMAP释放临时表相关的资源,包括释放锁和释放临时段C 比较重要的指标,代表本步操作消耗的CPU 时间片; 9i以后单位为microsecondE Elapsed Time ,代表本步操作消耗的自然时间, 9i以后单位为microsecond这里存在一个问题例如 在我们的例子中PARSE #20:c=2000,e=1087 CPU_TIME> Elapsed time ;理
论上 应当是 Elapsed Time = CPU TIME + WAIT TIME (等待事件的时间), 但是由于CPU TIME
和Elapsed time使用了不同 的clock时钟计时,所以在 2者都很短,或者 是CPU敏感的操作时 有可能 CPU TIME>
Elapsed time。相关的BUG 有:该问题可能 在12c中得到修复p 物理读的数目CRCR一致性读引起的buffer get 数目CU 当前读current read 引起的buffer get 数目r 处理的行数CLOSE #[CURSOR]:c=%u e=%u dep=%d type=%u tim=%u ==》一个游标关闭的例子CLOSE游标关闭type 关闭游标的操作类型STAT #[CURSOR] id=N cnt=0 [pid=0 pos=0 bj=0 p=’SORT AGGREGATE ‘]11g 以上还提供如下信息:STAT #2 id=1 cnt=26 pid=0 pos=1 bj=0 p=’HASH GROUP BY (cr=1143 pr=1139 pw=0 time=61372 us)’
STAT #2 id=2 cnt=77276 pid=1 pos=1 bj=96551 p=’TABLE ACCESS FULL FULLSCAN (cr=1143 pr=1139 pw=0 time=927821 us)’XCTEND rlbk=0, rd_only=1绑定变量BINDS #20:
kkscoacd
Bind#0
oacdty=96 mxl=2000(150) mxlc=00 mal=00 scl=00 pre=00
oacflg=03 fl2=1000000 frm=01 csi=873 siz=2000 ff=0
kxsbbbfp=7f9ccfec6420 bln=2000 avl=50 flg=05
value=”MACLEAN如果看到 “bind 6: (No oacdef for this bind)”类似的信息则说明在trace时 还没有定义绑定数据。 这可能是在trace时游标还没绑定变量。WAIT #20: nam=’db file scattered read’ ela= 42 file#=1 block#=80386 blocks=7 obj#=96551 tim=1344883874069383在上例中针对 db file scattered read , P1为文件号, P2为 起始块号, p3为 读的块数, 即db file scattered read 是从 1号文件的第80386 个块开始一次读取了7个块。注意在10046中 出现的WAIT 行信息 都是 已经结束的等待事件, 而当前等待则不会在trace中出现,直到这个当前等待结束。 你可以通过systemstate dump/errorstack等trace来获得当前等待信息。

相关推荐: 2-7.访问网络文件共享服务

##访问网络文件共享服务####学习目标 挂载网络共享 自动挂载网络共享1.1##挂载网络文件系统 网络文件系统是由网络附加存储服务器通过网络向多个主机提供的一种文件系统,而不是由块设备(例如硬盘驱动器)提供的。客户端通过特殊的文件系统协议和格式访问远程存储 …

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 03/30 21:34
下一篇 03/30 21:34