2019独角兽企业重金招聘Python工程师标准>>>

一、诊断事件
    诊断事件无官方技术文档支持,使用存在风险,慎用。使用诊断事件可以获取问题更多的信息,调整系统运行
特性,启用某些内部功能。用于系统故障的诊断。跟踪应用,改变系统运行模式。
1.DUMP分析
    immediate dump:
    alter session set events 'immediate trace name <dump> level <n>' # n标示trace详细程度
        alter session set events 'immediate trace name controlf level 10';
    on-error dump:通常在参数文件中设置
    event = "<error> trace name errorstack level <n>" # error ORA-XXX,n详细程度
        event = "60 trace name errorstack level 1" # 发生ORA-60错误时,产生1级信息
    变更运行特性:通常参数文件中设置
    event = "<event> trace name context forever, level <level>" #<event>指明要变更的特性
    event = "<event> trace name context forever, level <level>":参数,会话,系统级
    alter {session|system} set events '<event> trace name context forever, level <n>';
    tree dump:分析索引的结构和变化
    ALTER session set events 'immediate trace name treedump level <OBJECT_ID>';  #<OBJECT_ID>索引的ID
    SELECT object_id,object_name FROM user_objects WHERE object_name LIKE 'IDX_%'; 
参考资料:
http://blog.itpub.net/28507395/viewspace-1328056
http://blog.itpub.net/758322/viewspace-683573
2.常见故障
    实例或进程crash
    进程hang住
        分系统级和应用级,进程等待某资源无法获得,通过等待性能视图,hanganalyze
    非正常循环loop
    系统性能低
    looping:等待某个事件
    应用性能分析工具:event 10046 tkprof
二、常见事件分析
1、sql_trace: 将SQL执行的整个过程输出到一个trace文件中,我们可以读这个trace 文件来了解在这个SQL执行过程中
           Oracle 都做了哪些操作。
使用过程:
a.设置trace文件标识,或使用语句查(如10053)
b.可以通过语句和参数文件设置
    alter session set sql_trace=true;  #会话级
    alter database set sql_trace=true;  #实例级
    参数文件中配置sql_trace
c.执行相关SQL语句
d.关闭trace
    alter session[database] set sql_trace=false;
    sqlplus退出后自动关闭sql_trace;
e、利用oracle工具TKPROF格式化查看trace文件
    tkprof 工具只能用在处理SQL_TRACE和10046事件产生的trace,其他事件如10053不能处理。
参数介绍:
    sys #默认值为yes,输出文件中是否包含以SYS用户运行的sql语句。
    record #指定分析输出记录所有非递归sql文件如:record=c:\test.log,用tkprof格式化后
            大体了解跟踪非递归SQL。有助于我们重演SQL语句(绑定变量的不可以)。
    aggregate #指定tkprof是否将同样文本内容的sql聚合处理,参数为默认为no。
    sort #用来指定tkprof输出文件里sql语句的排序,默认是按照执行的先后顺序排序,参数最
          经常用的方式sort=prsela,exeela,fchela,这三个值加起来就是响应时间,即按照响应
          时间排序。
    print #搭配sort一起使用,用来指定tkprof输出sql语句的数量。如输出一个跟踪文件里响
           应时间排前十的SQL,sort=prsela,exeela,fchela print=10。
    explain #参数是为每一个SQL提供一个执行计划。使用的方法是explain=用户名/密码
    wait #指定输出文件是否包含等待事件,默认是包含的。一般都取默认值。    
查找Trace文件:
    默认开启的环境下找会话的Trace文件,找到会话号,通过会话号,找到对应的trace文件
        select sid from v$mystat where rownum=1;
        select username,sid,serial#,paddr from v$session where username='SYSTEM';
        select spid from v$process where addr = (select paddr from v$session where sid=139);
        然后去udump目录找到对应的Trace文件;
    跟踪其他用户,查到用户的spid,利用dbms_system.set_sql_trace_in_session(129,55,true)包  
        exec dbms_system.set_sql_trace_in_session(129,55,true);  #129 sid,55 serial#
        会话执行相关SQL
        exec dbms_system.set_sql_trace_in_session(129,55,false);  
TKPROF工具使用过程:
    tkprof  /u01/app/oracle/admin/ipemsdb/udump/ipemsdb_ora_17914.trc   
    /u01/app/17914.trc.txt  aggregate=yes sys=no waits=yes sort=prsela,
    exeela,fchela record=/u01/app/17914.sql
Trace文件结构解析:
    服务器执行的SQL语句;
    语句跟踪统计信息;
    行源操作过程;
    汇总统计信息
统计信息各列说明:
CALL #每次SQL语句的处理都分成三个部分。
Parse #这步将SQL语句转换成执行计划,检查是否有正确的授权和所需要的对象是否存在。
Execute #这步是真正的由Oracle来执行语句。包括修改数据,和确定选择的记录。
Fetch #返回查询语句中所获得的记录,这步只有select语句会被执行。
COUNT #这个语句被parse、execute、fetch的次数。
CPU  #这个语句对于所有的parse、execute、fetch所消耗的cpu的时间,以秒为单位。
ELAPSED #这个语句所有消耗在parse、execute、fetch的总的时间。
DISK #物理读取块的数量。
QUERY #在一致性读模式下,所有parse、execute、fetch所获得的buffer的数量。
CURRENT #在current模式下所获得的buffer的数量。
ROWS #所有SQL语句返回的记录数目,但是不包括子查询中返回的记录数目。对于select语句,返
      回记录是在fetch这步,对于insert、update、delete操作,返回记录则是在execute这步。    
参考资料:http://ylw6006.blog.51cto.com/470441/895017/

2、10046事件: 跟踪会话执行的SQL语句,等待事件,通过TDPROF格式化trace
使用过程:
a.事件的4个级别:
    1  - 启用标准的SQL_TRACE功能,等价于sql_trace
    4  - Level 1 加上绑定值(bind values)
    8  - Level 1 + 等待事件跟踪
    12 - Level 1 + Level 4 + Level 8
b.启动10046事件
    alter session[system] set events ‘10046 trace name context forever, level 12’; --当前会话
    exec dbms_monitor.session_trace_enable(267,996,waits=>true,binds=>true); --其他会话 SID,SERIAL#
c.执行相关SQL
d.关闭10046事件
    alter session set events ‘10046 trace name context off’; --当前会话
    exec dbms_monitor.session_trace_disable(267,996); --其他会话
对于通过DBLINK执行的SQL语句无法进行跟踪和获取执行计划。
SID,SERIAL可以从v$session中查询
    select SID,SERIAL# from v$session where sid =(select sid from v$mystat where rownum=1);
参考资料:http://blog.csdn.net/tianlesoftware/article/details/5857023
TRCA工具:
http://blog.csdn.net/tianlesoftware/article/details/7246542

3、10053事件:跟踪CBO产生执行计划,解决执行计划失真问题,CBO优化器依赖分析数据,适用于特定的SQL
使用过程:
a.确定当前trace文件
    默认即当前会话的SPID对应trace,可以手动设置trace文件标识
    alter session set tracefile_identifier='10053_event';
    可通过如下sql查询trace文件路径
    SELECT      d.VALUE
             || '/'
             || LOWER (RTRIM (i.INSTANCE, CHR (0)))
             || '_ora_'
             || p.spid
             || '.trc'
                AS "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;    
b.启动10053事件
    ALTER SESSION SET EVENTS='10053 trace name context forever, level 1[2]';
c.执行sql
    select * from all_tables where table_name='T';    
d.关闭10053事件
    ALTER SESSION SET EVENTS '10053 trace name context off';
e.查看trace文件
    在udump目录下含有tracefile_identifier的trace文件。    
参考资料:http://blog.csdn.net/tianlesoftware/article/details/5859027    
    
4、oradebug:
    oradebug help #查看命令帮助信息
使用过程:
a.追踪进程
    系统的进程ID,使用oradebug setospid id;
    Oracle ID,使用oradebug setorapid id;
b.查询进程号
    select a.username,a.sid ,a.serial#,b.spid  from v$session a,v$process b, v$mystat c  
    where a.paddr=b.addr  and a.sid=c.sid and rownum<2;
    select pid,spid,username from v$process; #pid oracle_id,spid os_id
c.获得系统状态信息,使用spid
   oradebug setospid 27028
   oradebug unlimit
   oradebug dump systemstate 10
   oradebug TRACEFILE_NAME
   oradebug close_trace
d.获得某进程信息
   oradebug dump processstate 10
e.获得进程错误信息
   oradebug dump errorstack 3;
参考资料:http://blog.csdn.net/tianlesoftware/article/details/6525628

5、HANGANALYZE:用于分析hang住而产生严重的性能问题
使用过程
a.单实例
    oradebug hanganalyze 3;
b.rac环境使用
    ALTER SESSION SET EVENTS 'immediate trace name HANGANALYZE level <level>';
参考资料:
http://blog.csdn.net/tianlesoftware/article/details/6321961
http://blog.itpub.net/12020513/viewspace-615165

6、10060事件:分析SQL的断语,用于执行计划的分析

7、分析事例:block dump分析段碎片:
set autotrace on;查看consistent gets,比较表中的数据和对象视图中数据是否一致,block dump查看是否空块多,
alter system dump datafile 5 block 13;
alter table ...move解决

转载于:https://my.oschina.net/peakfang/blog/2245913

oracle 性能优化 07_诊断事件相关推荐

  1. 春节福利:《Oracle性能优化与诊断案例精选》电子版首次公开下载

    值此猪年春节到来之际,恩墨云服务团队恭祝大家新年快乐,心想事成.同时我们也为大家准备了一份新年礼物,首次公开Eygle和600主编的<Oracle性能优化与诊断案例精选>电子版下载. 本书 ...

  2. 《Oracle性能优化与诊断案例精选》——2.3 衣带渐宽终不悔

    本节书摘来自异步社区出版社<Oracle性能优化与诊断案例精选>一书中的第2章,第2.3节,作者:盖国强 , 李轶楠 ,更多章节内容可以访问云栖社区"异步社区"公众号查 ...

  3. 《Oracle性能优化与诊断案例精选》——2.5 回首向来萧瑟处,也无风雨也无晴...

    本节书摘来自异步社区出版社<Oracle性能优化与诊断案例精选>一书中的第2章,第2.5节,作者:盖国强 , 李轶楠 ,更多章节内容可以访问云栖社区"异步社区"公众号查 ...

  4. 《Oracle性能优化与诊断案例精选》——第2章 回首向来萧瑟处,也无风雨也无晴...

    第2章 回首向来萧瑟处,也无风雨也无晴 Oracle性能优化与诊断案例精选 --我的十年Oracle DBA奋斗路(侯圣文) 题记 迄今为止,我觉得这辈子最幸运的两件事,一件是遇见了我太太,另一件就是 ...

  5. Oracle性能优化 以及 库缓存命中率及等待事件

    http://www.cnblogs.com/hyddd/archive/2009/08/30/1556939.html 前言 最近hyddd一直看Oracle的资料,今天特地总结一下这段时间了解到的 ...

  6. Oracle性能优化专题

    Oracle优化是开发人员必须掌握的技能,与其说是技能不如是开发基本.而且在面试过程中这个话题也常常被问到,有一两年工作经验的童鞋面试这个问题是肯定要被问到的,如果知识简单的CRUD实现功能,则是没有 ...

  7. oracle性能优化之awr分析

    oracle性能优化之awr分析 作者:bingjava 最近某证券公司系统在业务期间系统运行缓慢,初步排查怀疑是数据库存在性能问题,因此导出了oracle的awr报告进行分析,在此进行记录. 导致系 ...

  8. 如何“暴力破解”Oracle性能优化的极端问题(附精彩案例解读)

    云和恩墨大咖系列报道 2019数据技术嘉年华于11月16日在京落下了帷幕.大会历时两天,来自全国各地上千名学术精英.数据库领袖人物.数据库专家.技术爱好者在这里汇聚一堂,围绕"开源 • 智能 ...

  9. 简单介绍oracle执行计划,Oracle性能优化之oracle中常见的执行计划及其简单解释

    一.访问表执行计划 1.table access full:全表扫描.它会访问表中的每一条记录(读取高水位线以内的每一个数据块). 2.table access by user rowid:输入源ro ...

最新文章

  1. 红旗桌面版本最新运用要领和成果解答100例-7
  2. pymysql连接mysql_python使用MYSQL数据库
  3. python之sys
  4. 链表的一些leetcode题目+python(c++)
  5. LeetCode刷题——字符串转换整数
  6. 通过ping命令查看服务器是linux还是windows系列
  7. sencha Touch 2.4 学习之 XTemplate模板
  8. 大数据之-Hadoop_1.x和2.x区别---大数据之hadoop工作笔记0012
  9. mindray心电监护仪使用说明_界面张力仪的使用步骤以及画面清晰度相关说明
  10. 数据挖掘的数据集资源
  11. 计算机应用精华系统性整理
  12. stm32f4有重映射么_STM32单片机重映射USART设计
  13. 如何修改C:\Windows\System32\drivers\etc\hosts文件
  14. 怎么给PDF文件进行压缩
  15. python中通信模块
  16. 保罗兰德作品赏析_每周一书:保罗·兰德《设计的意义:保罗·兰德谈设计、形式与混沌》...
  17. 【渝粤题库】广东开放大学 公司金融 形成性考核
  18. TuShare Pro 股票期货数据提取神器(Python)
  19. 怎么通过示波器测永磁电机的极对数(PMSM+BLDC)
  20. matlab 金融时间序列工具箱,Matlatb金融时间序列工具箱——建立金融时间序列

热门文章

  1. ruby hash方法_Ruby中带有示例的Hash.invert方法
  2. uva 10539——Almost Prime Numbers
  3. Linux文件与目录管理常用命令
  4. 每日一题:leetcode74.搜索二维矩阵
  5. 03-树1 树的同构 (25 分)
  6. 1089 狼人杀-简单版 (20 分)
  7. java小游戏毕业论文,你不懂还不学?
  8. 知乎大V推荐!面试官6个灵魂拷问,原理+实战+视频+源码
  9. uoj#388. 【UNR #3】配对树(线段树合并)
  10. [BZOJ2599][IOI2011]Race 点分治