WEB开发网
开发学院数据库Oracle 教你熟练使用hanganalyze来分析数据库 阅读

教你熟练使用hanganalyze来分析数据库

 2007-08-18 12:38:24 来源:WEB开发网   
核心提示:1.为什么要使用hanganalyze?Oracle数据库“真的”hang住了,可以理解为数据库内部发生死锁,教你熟练使用hanganalyze来分析数据库,因为普通的DML死锁,oracle服务器会自动监测他们的依赖关系,目前有三种使用hanganalyze的方法:一种是会话级别的:ALTER

1.为什么要使用hanganalyze?

Oracle数据库“真的”hang住了,可以理解为数据库内部发生死锁。因为普通的DML死锁,oracle服务器会自动监测他们的依赖关系,并回滚其中一个操作,终止这种相互等待的局面。而当这种死锁发生在争夺内核级别的资源(比如说是pins或latches)时,Oracle并不能自动的监测并处理这种死锁。

其实很多时候数据库并没有hang住,而只是由于数据库的性能问题,处理的时间比较长而已。

Hanganalyze工具使用内核调用检测会话在等待什么资源,报告出占有者和等待者的相互关系。另外,它还会将一些比较”interesting”的进程状态dump出来,这个取决于我们使用hanganalyze的分析级别。

使用hanganalyze

hanganalyze工具从oracle8i第二版开始提供,到9i增强了诊断RAC环境下的“集群范围”的信息,这意味着它将会报告出整个集群下的所有会话的信息。

目前有三种使用hanganalyze的方法:

一种是会话级别的:

ALTER SESSION SET EVENTS 'immediate
trace name HANGANALYZE level <level>';

一种是实例级别:

ORADEBUG hanganalyze <level>

一种是集群范围的:

ORADEBUG setmypid
ORADEBUG setinst all
ORADEBUG -g def hanganalyze <level>

先解释下各个level的含义:

1-2:只有hanganalyze输出,不dump任何进程

3:Level2+Dump出在IN_HANG状态的进程

4:Level3+Dump出在等待链里面的blockers(状态为LEAF/LEAF_NW/IGN_DMP)

5:Level4+Dump出所有在等待链中的进程(状态为NLEAF)

hanganalyze报告会分作许多片断,会话片断信息总是由一个header详尽描述被提取的的会话信息。Oracle8i和9i的信息略有不同:

1 2 3  下一页

Tags:熟练 使用 hanganalyze

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接