HANGANALYZE 的简单使用与介绍

一.  HANGANALYZE 的2种使用方式:
1、“HANGANALYZE”命令从Oracle 8.1.6版本开始提供。在Oracle9i中,它被增强为在真实应用集群(RAC)环境中提供“集群范围”的信息。这意味着它将为集群中的所有会话生成信息,而不管发出该命令的实例是什么。
HANGANALYZE可以使用以下语法执行:
SQL>ALTER SESSION SET EVENTS 'immediate trace name HANGANALYZE level <level>';-- 该命令对于RAC,会收集所有节点上的信息
ALTER SESSION SET EVENTS 'immediate trace name HANGANALYZE level 3;
2、SYSDBA登录
当数据库hang住时,无法登陆时,可以通过prelim的登陆方式登录,如下:
sqlplus -prelim / as sysdba
SQL>ORADEBUG hanganalyze <level> --for 单实例
要在集群范围内执行HANGANALYZE,请使用以下语法:
              SQL>ORADEBUG setmypid
              SQL>ORADEBUG setinst all
              SQL>ORADEBUG -g def hanganalyze <level>     --for RAC 实例
这些级别的定义如下:
10 Dump all processes (IGN state)
5 Level 4 + Dump all processes involved in wait chains (NLEAF state)
4 Level 3 + Dump leaf nodes (blockers) in wait chains (LEAF,LEAF_NW,IGN_DMP state)
3 Level 2 + Dump only processes thought to be in a hang (IN_HANG state)
1-2 Only HANGANALYZE output, no process dump at all
注意:如果Level过大的话会产生大量的跟踪文件并影响系统的I/O性能,Oracle建议不要采用3级以上的跟踪。一般来讲,不建议使用level 3以上的操作,因为产生的trace可能会很大,尤其是大型的OLTP系统;
另外一般数据库hang住时可能系统压力都巨大,所以再产生很大的trace可能导致问题更加严重。

二、示例
1、示例一
确认集群: select instance_name from gv$instance;
SQL> alter session set events 'immediate trace name HANGANALYZE level 3';
获取trace 文件名称和路径:
SQL> oradebug tracefile_name
SQL> 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;
2、示例二
--For 单实例
SQL> oradebug hanganalyze 3;
/u01/app/oracle/admin/rac/udump/devedb/devedb/trace/devedb_ora_98289.trc
这个命令会提示我们生成的trace 文件。

--For RAC
SQL> oradebug setmypid
SQL> oradebug setinst all
SQL> oradebug -g def hanganalyze 3;
Hang Analysis in /u01/app/oracle/admin/rac/udump/devedb/devedb2/trace/devedb2_ora_98289.trc
查看trace 文件:
$ cat devedb2_ora_98289.trc
三、说明
([nodenum]/cnode/sid/sess_srno/session/ospid/state/[adjlist]):
解释如下:
nodenum:定义每个session的序列号
sid:session的sid
sess_srno:session的Serial#
ospid:OS的进程ID
state:node的状态
adjlist:表示blocker node
predecessor:表示waiter node
State有如下几种状态:
       (1)IN_HANG:如果Session处于这种状态,表示Session遇到deadlock或者处于hung状态。
       (2)LEAF/LEAF_NW:这些Session通常是“blocker”或者是等待某些资源的“slow” node,通过字段“predecessor” 可以很容易标识出这些node。
       (3)NLEAF:这些Session通常被认为是“stuck”会话,意味着这些Session在等待某些Session的资源。通过字段“adjlist”可以很容易的定义该进程的blocker。
       (4)IGN/IGN_DMP:这些Session通常是IDLE Session。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值