暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

HANG和LOOPING以及诊断方法

白鳝的洞穴 2020-04-27
1212
如果数据库没有宕,但是运行不正常,或者应用出现异常,那么很可能数据库是遇到了HANG或者LOOPING的现象。那么说明是HANG什么是LOOPING呢?
HANG分为系统级和应用级,当某个会话需要获得某个资源才能继续操作,但是它无法获得,那么就会出现会话级的HANG。如果整个系统的所有会话都处于HANG状态,那么我们就说整个数据库都HANG了。分析hang可以使用很多工具。比如要分析进程或者会话为什么会HANG,可以通过v$session, process state dump等手段,如果整个数据库HANG了,那么可以通过hanganalyze, system  state dump等手段来进行分析。另外视图v$lock,v$latch,v$latchholder都是分析HANG的常用手段。此外,分析alert log,trace文件,Os日志也是做hang分析与定位经常要做的。
当某个进程或者会话所需要的一个资源被另外一个STATE OBJECT所持有,那么这个现象就是LOOPING,LOOPING往往表现在处于该状态的会话在等待某个等待事件。分析LOOPING的主要工具是各级的STATE DUMP,以及V$SESSION,v$lock,v$latch,v$latchholder或者STACK DUMP工具(比如oradebug、strace,pstack,truss,tuse等)。如果要分析looping,可以使用以下手段:
  • 做多个SYSTEMSTATE/PROCESSSTATE DUMP

  • 使用ORADEBUG获得CALL STACK

  • 通过HANGANALZYE报告

  • 通过系统视图

在今天的话题中,多次提到了STATE OBJECT,那么什么是STATE OBJECT呢?这是ORACLE SGA中的内存结构。State objects 包含::
  • processes

  • Sessions

  • Latches enqueues

  • Buffer handles

故障或者失效的STATE OBJECT会被PMON 用于故障清理,我们经常可以在SYSTEMSTATE DUMP和PROCESSSTATE DUMP中看到各种STATE OBJECT。比如对于一个进程,就存在一个PROCESS STATE OBJECT,该OBJECT还包含了会话,CURSOR等。

STATE OBJECT的头部结构如下图:

这是所有的STATE OBJECT所共有的。我们看上面的例子,这个SO是处于FREE LIST上,PMON可以随时释放它(如果需要)。
下面是一个SESSION STATE OBJECT的例子,对于有兴趣读STATE DUMP的朋友可以参考一下:


最后修改时间:2020-04-28 08:13:11
文章转载自白鳝的洞穴,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论