Oracle RAC HM(Hang Manager)
在Oracle数据库中,挂起(hang)指某一个进程由于无法获得申请的资源而进入的等待状态,这种等待状态只有在获得申请的资源后才能够解除,HM实现对hang的管理,包括了对于hang的监控,分析,记录和解决。hang的情况分为两类:死锁(Dead Lock)和等待链(Wait Chain)
死锁的发现方式
步骤1:每个实例的LMD进程定期(默认为10s)申请DI资源,获得DI资源的LMD进程会搜索各个实例没有被满足的锁请求,并绘制锁的等待链路。
步骤2:如果LMD进程发现存在闭合环路(死锁)的存在,那么就会将导致这个环路的进程的当前DML语句回滚,以解决死锁,并释放资源,如果没有发现死锁,也会释放资源。
DI资源在整个数据库层面是唯一的,目的是为了确保在整个数据库层面只能有一个LMD进程执行死锁发现过程
等待链是由阻塞进程和等待进程构成的,而阻塞进程中会存在一个或多个根阻塞进程,这个进程阻塞了所有的其他进程,如果根阻塞进程正在忙于一些操作,那么也许这种等待链的出现是正常的,如果阻塞进程处于空闲状态,那么也许这种等待链的出现就是不正常的,而打破等待链的方法,就是终止根阻塞进程。HM能够主动发现数据库中存在的等待链,并从对个角度对它们分析,如果发现了真正影响数据块性能的hang,会根据具体的情况来决定是否要解决问题,而且即使不能直接解决,也会将相应的诊断信息记录下来并持续监控。
HM的工作由七个阶段构成
阶段1(搜集阶段):在这个阶段,每个实例的dia0进程会定期搜集hang analyze信息。
阶段2(发现阶段):在这个阶段,每个实例的dia0进程会分析搜集到的hang alalyze信息,找到出现hang的会话,并发送给主节点的dia0进程。
阶段3(绘制阶段):在这个阶段,主节点的dia0进程根据每个实例的dia0进程发送过来的信息,绘制等待链。
阶段4(分析阶段):在这个阶段,主节点dia0进程根据绘制的等待链,分析是否的确出现了hang。
阶段5(验证阶段):在这个阶段,主节点dia0进程会再次执行阶段1-4,之后将阶段4的分析结果和这一次的分析结果进行对比,验证是否真的发生了hang。
阶段6(定位阶段):在这个阶段,主节点dia0进程更加验证阶段的结果定位到等待链的根阻塞进程。
阶段7(解决阶段):在这个阶段,主节点dia0进程根据参数_hang_resoluton_scope的值判断hang是否能够被解决。
HM的参数
_hang_detection_enabled:该参数决定HM特性在数据库中是否被启用,默认值为true。
_hang_detection_interval:该参数指定HM搜集hang analyze信息的时间间隔,默认值为32s。
_hang_verification_interval:该参数指定HM验证hang的时间间隔,默认值为46s。
_hang_resolution_scope:该参数指定HM解决hang时能够操作的范围,默认值为process,允许的值如下:
off:表示HM只会继续监控hang,而不会做任何操作去解决hang。
process:表示HM可以通过终止根阻塞进程的方式来解决hang,但是这里的根阻塞进程不能是数据库重要的后台进程,因为这会导致实例crash。
instance:表示HM可以通过终止实例的方式来解决hang。
DIA0进程的跟踪日志文件
主跟踪文件(_DIA0_.trc):这个日志文件会记录dia0进程工作的详细信息,包括发现,分析,处理hang的过程。
历史跟踪文件(_DIA0__n.trc):由于dia0进程的跟踪日志文件会随着数据库的运行不断产生信息,可能使这个日志文件变得很大,dia0进程会定期将日志信息写到它的历史日志文件中,历史日志文件的n为正整数,会随着时间推移不断增加。
incident日志文件:如果HM通过终止进程方式来解决hang,会首先在alert.log中记录ORA-32701错误,而由于ADR的存在,dia0进程同时会产生一个incident日志文件记录本次问题的详细信息。
与hang相关的视图
V$HANG_INFO:该视图包含了HM发现的hang的详细信息。
V$HANG_SESSION_INFO:该视图包含了与hang相关的会话信息。
V$HANG_STATISTICS:该视图包含了与hang相关的统计信息。
页:
[1]