一次数据库hang,大量enqueue等待事件的问题

原创 2012年03月30日 10:21:36
现象:数据库hang,大量enqueue等待事件,大约20分钟后数据库数据库自己恢复
平台 oracle 9.2.0.7 + hpux 11.31


收到告警:数据库断连和非空闲等待事件2948个,经查询bomc监控日志,2948个等待事件具体如下,因此原因基本可以确定为大量enqueue(锁等待)等待导致数据库异常,从p1=1397817350可以推断出lock mode为SQ,及sequence相关。Enqueue的进一步原因和相关应用sql还需要进一步确认。

       SID    SERIAL# OSUSER                          USERNAME                          SVRPROC PROCESS      EVENT                                                                         P1         P2              P3
---------- ---------- ------------------------------ ------------------------------ ------------ ------------ ---------------------------------------------------------------- ---------- ---------- ----------
         25     12810                                                                            7832                          enqueue                                                                    1397817350     149               0
         63     40789                                                                            8166                         enqueue                                                                      1397817350     149               0
         59     32332                                                                            20857                      enqueue                                                                      1397817350     149               0
         43     60179                                                                            18928                      enqueue                                                                      1397817350     149               0
       399     29721                                                                            19165                      enqueue   
.。。。。。

经查询,enqueue类型为SQ
SELECT chr(to_char(bitand(1397817350,-16777216))/16777215)||
  2                   chr(to_char(bitand(1397817350, 16711680))/65535) "Lock",
  3                   to_char( bitand(1397817350, 65535) )    "Mode" from dual;

Lock   Mode
-- -
SQ   6

SQL> select OWNER,OBJECT_NAME,OBJECT_TYPE from dba_objects where object_id=149;

OWNER                          OBJECT_NAME          OBJECT_TYPE
------------------------------ -------------------- ------------------
SYS                            AUDSES$              SEQUENCE

通过收集故障时段的statspack报告,得出执行速度比较慢的语句,特别是含有squence的部分主要如下。但这些语句理论上该seq为循环模式,不应该导致enqueue等待。很可能由于连接数超过最大数,导致部分业务不能正常连接。p2=149看,应该是AUDSES$ 导致enqueue,而AUDSES$正是登录使用的sequeue,对应v$session中的AUDSID列

SQL> SELECT text FROM ALL_SOURCE where TYPE='FUNCTION' AND NAME='DSM_GET_MG_ID';

TEXT
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function       DSM_GET_MG_ID return varchar2 is
  V_Result varchar2(32);
  V_SEQ Varchar2(20);
begin
  select dsm_seq_mgid.nextval into v_seq from dual;

  V_Result :=to_char(sysdate,'YYYYMMDDHH24miSS')||v_seq;
  return(V_Result);
end DSM_GET_MG_ID;


10 rows selected.


SQL> select * from dba_sequences where SEQUENCE_NAME = 'DSM_SEQ_MSGID';

SEQUENCE_OWNER                 SEQUENCE_NAME                   MIN_VALUE  MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER
------------------------------ ------------------------------ ---------- ---------- ------------ - - ---------- -----------
CBOSS                          DSM_SEQ_MGID                      100000     999999            1 Y Y         10      489050
    
    
    继续分析,感觉sequeue不是最终的原因,查看系统日志,看出了别的问题
    经过继续分析,昨日问题现在看根本原因应该是日志文件不能正常切换导致数据库hang,进而导致各种等待事件。已1_59448.dbf文件为例,17:01就开始归档,17:39:27才最终完成,正常情况下应该1分钟内完成,由于未知原因导致花费40分钟才完成一个日志文件的归档动作。我看了下相关文件系统,未出现归档表空间满的情况,故障时间点利用率只有15%。



Mon Mar 26 17:01:41 2012
ARC1: Evaluating archive   log 3 thread 1 sequence 59448
ARC1: Unable to archive log 3 thread 1 sequence 59448
      Log actively being archived by another process
Mon Mar 26 17:01:46 2012
Beginning log switch checkpoint up to RBA [0xe83a.2.10], SCN: 0x0b09.08dc9044
Thread 1 advanced to log sequence 59450
  Current log# 2 seq# 59450 mem# 0: /dev/vgcboss02/rredo02
Mon Mar 26 17:01:46 2012
ARC1: Evaluating archive   log 3 thread 1 sequence 59448
ARC1: Unable to archive log 3 thread 1 sequence 59448
      Log actively being archived by another process
ARC1: Evaluating archive   log 1 thread 1 sequence 59449
ARC1: Beginning to archive log 1 thread 1 sequence 59449
Creating archive destination LOG_ARCHIVE_DEST_1: '/cboss/arch/1_59449.dbf'
Mon Mar 26 17:04:49 2012
Completed checkpoint up to RBA [0xe83a.2.10], SCN: 0x0b09.08dc9044
Mon Mar 26 17:14:22 2012
ORACLE Instance cbossdb - Can not allocate log, archival required
Mon Mar 26 17:14:22 2012
ARCH: Connecting to console port...
Thread 1 cannot allocate new log, sequence 59451
All online logs needed archiving
  Current log# 2 seq# 59450 mem# 0: /dev/vgcboss02/rredo02
Mon Mar 26 17:39:25 2012
ARC1: Completed archiving  log 1 thread 1 sequence 59449
Mon Mar 26 17:39:25 2012
Beginning log switch checkpoint up to RBA [0xe83b.2.10], SCN: 0x0b09.09609366


NAME                                                                             COMPLETION_TIME      S
-------------------------------------------------------------------------------- -------------------- -
/cboss/arch/1_59436.dbf                                                          2012/03/26  14:22:34 A
/cboss/arch/1_59437.dbf                                                          2012/03/26  14:30:44 A
/cboss/arch/1_59438.dbf                                                          2012/03/26  14:45:22 A
/cboss/arch/1_59439.dbf                                                          2012/03/26  14:55:34 A
/cboss/arch/1_59440.dbf                                                          2012/03/26  15:05:23 A
/cboss/arch/1_59441.dbf                                                          2012/03/26  15:16:23 A
/cboss/arch/1_59442.dbf                                                          2012/03/26  15:26:59 A
/cboss/arch/1_59443.dbf                                                          2012/03/26  15:42:02 A
/cboss/arch/1_59444.dbf                                                          2012/03/26  15:57:22 A
/cboss/arch/1_59445.dbf                                                          2012/03/26  16:12:52 A
/cboss/arch/1_59446.dbf                                                          2012/03/26  16:27:01 A

NAME                                                                             COMPLETION_TIME      S
-------------------------------------------------------------------------------- -------------------- -
/cboss/arch/1_59447.dbf                                                          2012/03/26  16:40:53 A
/cboss/arch/1_59449.dbf                                                          2012/03/26  17:39:25 A
/cboss/arch/1_59448.dbf                                                          2012/03/26  17:39:27 A
/cboss/arch/1_59450.dbf                                                          2012/03/26  17:40:32 A
/cboss/arch/1_59451.dbf                                                          2012/03/26  17:51:06 A
/cboss/arch/1_59452.dbf                                                          2012/03/26  18:06:51 A
/cboss/arch/1_59453.dbf                                                          2012/03/26  18:33:36 A
/cboss/arch/1_59454.dbf                                                          2012/03/26  19:12:46 A
/cboss/arch/1_59455.dbf                                                          2012/03/26  19:54:10 A
/cboss/arch/1_59456.dbf                                                          2012/03/26  20:33:57 A

总结分析:最终归档慢的原因没有找到,但原因却不是当初表现的seq问题,所以分析问题还需要全面进行系统查看。主机、数据库的日志是必须要分析的

oracle数据库等待事件

查看等待事件 select inst_id,event,count(*) from gv$session where wait_class 1.1 等待事件主要可以分为两类,即空闲(IDLE)等...
  • caoyhao
  • caoyhao
  • 2016年08月11日 08:58
  • 1527

Enqueue (队列等待)

Enqueue (队列等待): Enqueue是一种保护共享资源的锁定机制。该锁定机制保护共享资源,以避免因并发操作而损坏数据,比如通过锁定保护一行记录,避免多个用户同时更新。Enqueue采用排队机...
  • zq9017197
  • zq9017197
  • 2013年11月29日 15:55
  • 1070

AWR报告(四)--常见等待事件

oracle等待事件是衡量oracle运行状况的重要依据及指示,等待事件分为两类:空闲等待事件和非空闲等待事件, TIMED_STATISTICS = TRUE 那么等待事件按等待的时间排序,= FA...
  • tonyzhou_cn
  • tonyzhou_cn
  • 2013年08月14日 11:36
  • 1722

存储IO性能太差,导致数据库hang住

用户偶尔出现应用hang住,采集了几次卡住时候的AWR报告,请求进行诊断。 问题分析 步骤一:分析awr报告 可以看到系统的问题主要严重的是日志的写入等待和切换,外加一些热块争用如下 主要是在往...
  • wenzhongyan
  • wenzhongyan
  • 2015年03月13日 11:39
  • 2087

getline读取不等待输入的问题

先cin >>,然后getline读取时会发生一闪而过不等待输入的情况,用fflush(cin)清除输入缓冲区也是如此,纠结半天终于在妹神指导下搞清楚 由于输入一个数据后按了回车键,而getline没...
  • KUAILE123
  • KUAILE123
  • 2014年04月06日 21:40
  • 1777

DB2数据库HANG住的时候应该收集什么数据以及如何处理

问题: DB2在使用过程中经常会遇到HANG死,本文旨在探讨如果整个库/DB2都HANG死的时候,应该收什么数据,如何处理,以便事后分析HANG住的原因。 一 数据收集 1.) 最简单的命令是db...
  • qingsong3333
  • qingsong3333
  • 2016年09月11日 23:18
  • 753

Oracle11gRAC中的等待事件

1、RAC中等待事件的分类 集群的等待事件属于以下类别之一: 面向块的等待 gc current block 2-way gc current block 3-way gc cr b...
  • wang_san_shi
  • wang_san_shi
  • 2015年01月19日 15:31
  • 420

查看会话、锁、等待事件

1. 查看活动会话信息 SELECT * FROM V$SESSION WHERE USERNAME IS NOT NULL AND STATUS = 'ACTIVE' ORDER BY...
  • gumengkai
  • gumengkai
  • 2016年11月17日 10:52
  • 1961

Oracle OWI 等待事件历史视图及相关视图

Oracle提供的等待事件视图使得我们可以获取指定session以及实例级别等待事件的详细信息,这些视图分别是v$session_wait,v$session_event,以及v$system_eve...
  • robinson_0612
  • robinson_0612
  • 2013年04月17日 09:50
  • 4685

Oracle 常见的33个等待事件【转自dave偶像大神】

一. 等待事件的相关知识:   1.1 等待事件主要可以分为两类,即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件。 1). 空闲等待事件指ORACLE正等待某种工作,...
  • lovedieya
  • lovedieya
  • 2014年02月27日 01:46
  • 1997
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一次数据库hang,大量enqueue等待事件的问题
举报原因:
原因补充:

(最多只允许输入30个字)