龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 数据库类 > Oracle 技术 >

诊断Oraacle数据库Hanging问题(1)(4)

时间:2011-04-12 23:18来源:未知 作者:admin 点击:
分享到:
如果会话没有被挂起而只是运行缓慢,那么需要查看会话的具体信息: SELECT s.sid, s.value, t.name FROM v$sesstat s, v$statname t WHERE s.statistic# = t.statistic# AND s.sid =

如果会话没有被挂起而只是运行缓慢,那么需要查看会话的具体信息:

SELECT s.sid, s.value, t.name
FROM v$sesstat s, v$statname t
WHERE s.statistic# = t.statistic#
AND s.sid = <sid>;


如果会话极度的缓慢或者是被挂起了,那么需要查看会话的等待信息:

SELECT *
FROM v$session_wait
where sid = <sid>;

如果是个分布式事务,那么需要在各个节点上都运行如下SQL语句:

SELECT * FROM dba_2pc_pending;
SELECT * FROM pending_sessions$;
SELECT * FROM pending_sub_sessions$;
SELECT * FROM dba_2pc_neighbors;


如果是MTS服务器,那么可以查看一下当前的dispatcher的繁忙程度:

select name,network,status,
(busy /(busy + idle)) * 100 "% of time busy"
from v$dispatchers;

还可以查看V$SHARED_SERVERS视图获取相应的信息:

select name,status,requests, (busy /(busy + idle)) * 100

"% of time busy"
from v$shared_servers

收集操作系统的相关信息:

1) 简短的描述你的架构,包括CPU的数量,磁盘的数量。是否使用了裸设备,使用了NFS文件系统,共享磁盘...是否镜像了这些?
2) 测量不同操作系统级别的活动:过量的CPU或者I/O,页面,交换区等。有许多的工具可以监测这些,例如TOP。

Unix上的工具:SAR,VMSTAT,NETSTAT,TOP,TRUSS等;
Vms上的工具:MONITOR,ANALYZE,PROCESS等;
Windows上的工具:Performance Monitor, Event Monitor, Dr. Watson,qslice等;

3) 检查系统的日志文件,在大多数Unix平台上日志文件都存在于/var/adm目录下。

获取SYSTEMSTATE和HANGANALYZE的dump 

这两个命令将在user_dump_dest目录下创建一个非常大的跟踪文件,初始化参数文件中的MAX_DUMP_FILE_SIZE参数确定了能够容纳的最大跟踪文件的大小。使用Oradebug命令设置unlimit将能允许执行一个完全的dump。请确认整个数据库已经挂起或者即将挂起,并且在Alert告警日志文件中没有任何归档的错误的时候才可以做此操作。

注意:当数据库是集群数据库的时候,如果需要诊断挂起的问题,则需要在每个节点上都执行systemstate dump操作,建议做3次左右,以便能够确定数据库或者进程是否是真的挂起还是激活状态。

对于Oracle 8.0.5.x to 8.1.7.x的版本:

$ svrmgrl
svrmgr> connect internal
svrmgr>ALTER SESSION SET EVENTS 'IMMEDIATE TRACE NAME HANGANALYZE LEVEL 3';
wait 90 seconds
svrmgr>ALTER SESSION SET EVENTS 'IMMEDIATE TRACE NAME HANGANALYZE LEVEL 3';
EXIT ... then reconnect
svrmgr>ALTER SESSION SET MAX_DUMP_FILE_SIZE=UNLIMITED;
svrmgr>ALTER SESSION SET EVENTS 'IMMEDIATE TRACE NAME SYSTEMSTATE LEVEL 10';
wait 90 seconds
svrmgr>ALTER SESSION SET EVENTS 'IMMEDIATE TRACE NAME SYSTEMSTATE LEVEL 10';
wait 90 seconds
svrmgr>ALTER SESSION SET EVENTS 'IMMEDIATE TRACE NAME SYSTEMSTATE LEVEL 10';


对于Oracle 9.2.0.1或者更高的版本:

$ sqlplus /nolog
connect / as sysdba
oradebug setmypid
oradebug unlimit
oradebug hanganalyze 3
wait 90 seconds
oradebug hanganalyze 3
oradebug dump systemstate 10
wait 90 seconds
oradebug dump systemstate 10
wait 90 seconds
oradebug dump systemstate 10

获取STATPACK的输出报告

对于如何得到和分析statpack的输出报告,可以参考eygle的个人网站上的文章。http://www.eygle.com/archives/2004/11/statspack_list.html
获取PROCESSSTATE的dump

获取processstate dump,可以使用如下命令,建议执行三遍,将可以在user_dump_dest目录下找到生成的跟踪文件。

$ sqlplus "/as sysdba"
oradebug setospid <process ID>
oradebug unlimit

如果要获取errorstacks dump,可以使用如下命令,建议执行三遍,同样可以在user_dump_dest目录下找到生成的跟踪文件。

$ sqlplus "/as sysdba"
oradebug setospid <process ID>
oradebug unlimit
oradebug dump errorstack 3

(责任编辑 火凤凰 sunsj@51cto.com  QQ:34067741  TEL:(010)68476636-8007)


精彩图集

赞助商链接