有些时侯我当然指的是非常少的情况下我们会感觉我们的库Hang了加了隐号的意思是说有时真的是Hang了有一些则不是是由于性能的问题引起的我遇到过几次Hang的情况结合着网上一些文章把可能的原因当时我们应该做的一些操作进行了如下的总结不对的地方大家可以发Mail给我:
一数据库Hang时可能的现象
最直观的是你的大部分的业务操作比如说一个查询都使用好长的时间或根本就返回不出结果这和简单那种锁表是有区别的
在操作系统上用Hpunix用glanceAix用nmon及用sar做监测会出现系统空闲的假象表面看起来系统很闲实际上系统已经Hang了
查v$session_wait会出现大量的latch freeenqueue free buffer waits等等待事件有时后台会出现大量的trc文件另外需要观注一下$ORACLE_HOME/rdbms/log这个位置有一些时侯trace文件会生成到这里
二Oracle库Hang时一些有用的操作和查询
如果要寻求Oracle的技术支持我们需要dump一下Oracle的systemstate操作如下
SQL>conn / as sysdba;
SQL> alter session set events immediate trace name SYSTEMSTATE level ;
需要等几分钟的时间这时在initora中所设置的user_dump_dest所标识的位置就可以找到这个trc文件一般比较大捕获一些视图的状态值
SQL>conn / as sysdba;
SQL>set linesize
SQL>set pagesize
SQL>spool v_viewstxt
SQL> SELECT * FROM v$parameter;
SQL>SELECT class value name FROM v$sysstat;
SQL>SELECT sid id id type lmode request FROM v$lock;
SQL>SELECT llatch# nname hpid lgets lmisses limmediate_gets limmediate_misses lsleeps FROM v$latchname n v$latchholder h v$latch l WHERE llatch# = nlatch# AND laddr = hladdr(+);
SQL>SELECT * FROM v$session_wait ORDER BY sid;隔几秒重复执行次
SQL>spool off
有条件的话用statspack生成了一个Report如果你对statspach不熟悉可以参照?s=&threadid=这个链接
三产生Hang可能的几个原因
开归档的情况下归档位置所在的文件系统满了这时lgwr就会等待归档进程的完成DML写不了日志都处于等待的状态
在HP的系统开异步Io时没为dba的组设置MLOCK权限正常来说Oracle的启动是会报错的可是有些时侯比如Oracle的版本就不报错启动但是此时的异步Io是有问题的仔细查看你会在$ORACLE_HOME/rdbms/log看到大量的trc文件这种情形引的Hang我遇到过
由于异常进程引起的我所说的是那些占用系统资源(cpumemory)特别大的进程这些进程一般占用cpu会达到%以上相对其它的进程比较突出可以通过hpunix的glancetopasIBM的nmodtopasps等工具进行监测
由于主机系统阵列的某方面的瓶颈引起的在实际中最普遍的应该是Io的问题比如IO方面有瓶颈则dbwrlgwr就会引 free buffer waits log buffer space等一系列的等待事件此时是性能的问题感觉起来像Hang
也有bug的因素我的库都是最新的补丁这方面的问题还没遇到过
四几点处理建议
当得到Oracle的库奇慢或Hang时保持冷静的头脑很重要的可以按如下的方法进行一些处理
首先要到操作系统上去用glance等工具进行一下观察看一下cpu内存交换区磁盘的繁忙程度与平时是不是相似的同时看一看有没有占系统资源特别大的进程有些时侯是这些进程引起的通过v$process和v$session两个视图找到这Oracle进程的sidserial#把它用Alter system kill session sidserial#;杀掉就行了如果平时同样的时段你的磁盘的繁忙程度是%而些时它为%当然是假设了说明Oracle的库没准真的hang了
时间来得及的话执行一下二中的语句是很必要的这样可以把这些信息提交给Oracle的supporter让你们给你分析一下查一下原因
如果你的库开归档了出现Hang的时侯一定要看一下归档日志的文件系统是不是满了做一个完备一些的网管系统是很必要的
在HP系统上打开异步IO时一定不要忘记为dba这个组加上MLOCK的权限我就吃过这个亏
时常的观注一下v$session_wait或用statspack进行观注一下等待事件一般IO相关的事件较多为Oracle打开异步IO多加几个写进程及为Oracle数据文件所用的raw device使用条带都是很必要的与应用的开发商交流也很重要没准最近新上的一个应用就特耗IO或特占CPU资源
尽量要使用比较稳定的Oracle的版本比如Oracle及Oracel(最新为 )都很稳定的可以少去好多的麻烦