重庆思庄Oracle、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 222|回复: 0
打印 上一主题 下一主题

[Oracle] 10046事件分析sql执行计划

[复制链接]
跳转到指定楼层
楼主
发表于 2025-1-5 10:30:27 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
1.功能

10046解析sql语句的运行状态,包括parse/fetch/execute三个阶段中遇到的等待事件、消耗的物理读和逻辑读、cpu时间、执行计划等

可以跟踪应用程序所执行的sql语句,10046事件记录SQL如何运行,而10053记录优化器为什么为这个SQL选择某个执行计划。

① 0级:SQL_TRACE=FASLE 停止sql跟踪
② 1级:SQL_TRACE=TRUE 标准sql跟踪
③ 4级:1级+绑定变量
④ 8级:4级+等待事件
⑤ 12级:4级+8级
2.设置10046事件

必须具有alter session权限
追踪文件路径:show parameter user_dump_dest
session 级别: alter session set events '10046 trace name context forever,level 4';
system 级别 :  alter system set events ’10046 trace name context forever,level 4’;
关闭用户跟踪 :  alter session set events '10046 trace name context off';
设置标记:alter session set tracefile_identifier='mytrace';
3.使用oradebug

设置非本会话的跟踪需要采用oradebug

--用如下语句找出要跟踪的spid
select * from v$session a where audsid = userenv('sessionid'); --查询当前的sessionid
select s.USERNAME,
       s.OSUSER,
       s.SID,
       s.PADDR,
       s.PROCESS,
       p.spid     os_process_id,
       p.pid      oracle_process_id
  from v$session s, v$process p
where s.paddr = p.addr
   and s.username = upper('SYS')
   and s.SID = 160;
--设置跟踪进程id。
oradebug setospid 5672或
oradebug setorapid 15
--设置跟踪文件大小无限制
oradebug unlimit;
--设置跟踪,级别8
oradebug event 10046 trace name context forever,level 8;     
--查询跟踪级别
oradebug eventdump session         
--关闭跟踪
oradebug event 10046 trace name context off;      
获取跟踪文件的位置

1)oradebug获取跟踪文件
--使用oradebug获取本会话跟踪文件位置
SQL> oradebug setmypid
SQL> oradebug tracefile_name

--获取任意会话跟踪文件位置
SQL> oradebug setospid 8916
SQL> oradebug tracefile_name
2)sql获取跟踪文件
--sql查看当前session跟踪文件位置
select d.value || '\' || lower(rtrim(i.instance, chr(0))) || '_ora_' ||
       p.spid || '.trc' trace_file_name
  from (select p.spid
          from v$mystat m, v$session s, v$process p
         where m.statistic# = 1
           and s.sid = m.sid
           and p.addr = s.paddr) p,
       (select t.instance
          from v$thread t, v$parameter v
         where v.name = 'thread'
           and (v.value = 0 or t.thread# = to_number(v.value))) i,
       (select value from v$parameter where name = 'user_dump_dest') d;
4.tkprof翻译trace文件

tkprof bom_ora_8916.trc 8916.trc

cr:逻辑读,内存查找数据。
pr:物理读,数据文件读取数据。
time:耗费时间
card:实际返回结果集的行数。      
pw:物理写  
同时也可以看到执行计划,对象ID,解析调用执行情况,SQL_ID,SQL_HASH_VALUE,SQL_TEXT;


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2025-2-5 06:43 , Processed in 0.094818 second(s), 22 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表