接到客户电话,数据库失去响应,所有业务挂起
数据库版本为
引用
SQL> select * from v$version where rownum=1;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bi
主机版本为
引用
$ uname -a
HP-UX rp7410 B.11.23 U 9000/800 1943000290 unlimited-user license
查看数据库等待信息,可以看到enq: CF - contention导致数据挂起
引用
SQL> select sid,event from v$session_wait where event not like '%rdbms%' and event not like '%SQL%';
SID EVENT
---------- ----------------------------------------------------------------
164 control file sequential read
200 Streams AQ: qmn slave idle wait
205 Streams AQ: qmn coordinator idle wait
206 Streams AQ: waiting for time management or cleanup tasks
211 enq: CF - contention
212 enq: CF - contention
216 enq: CF - contention
219 smon timer
221 enq: CF - contention
225 pmon timer
于是马上查看阻塞会话信息
引用
SQL> select SID,SERIAL# from v$session where sid in (select sid from v$lock where block=1);
SID SERIAL#
---------- ----------
164 7097
220 1
首先在数据库层面将会话杀死
引用
SQL> alter system kill session '220,1';
alter system kill session '220,1'
*
ERROR at line 1:
ORA-00029: session is not a user session
提示会话220不是用户会话,那它是什么呢?
引用
SQL> select SID,AUDSID,USERNAME,TYPE,PROGRAM
2 FROM V$SESSION WHERE SID='220';
SID AUDSID USERNAME TYPE
---------- ---------- ------------------------------ ----------
PROGRAM
------------------------------------------------
220 0 BACKGROUND
oracle@rp4440 (CKPT)
可以看到是Oracle后台CKPT进程。
引用
SQL> alter system kill session '164,7097';
alter system kill session '164,7097'
*
ERROR at line 1:
ORA-00031: session marked for kill
进一步查看操作系统进程
引用
SQL> select SPID from v$process where addr=(select PADDR from v$session where sid=164);
SPID
------------
24660
SQL> !ps -ef|grep 24660
oracle 24660 1 0 12:49:16 ? 0:00 oraclexxxi (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle 24706 24701 0 12:56:33 pts/ta 0:00 /usr/bin/sh -c ps -ef|grep 24660
oracle 24708 24706 0 12:56:33 pts/ta 0:00 grep 24660
红色标注进程为引起数据库挂住的元凶,只要将其杀死,数据库恢复正常
引用
$ kill -9 24660
事后检查alert日志发现客户创建standby controlfile至nfs目录,导致数据库挂起。进一步检查nfs参数
引用
rw,bg,hard,nointr,rsize=32768,wsize=32768,vers=3,timeo=600,actimeo=0 0 2
发现并无异样,通过metalink解释,此为Oracle 10.2.0.1写nfs文件系统bug,Oracle号称通过添加nfs参数可以解决,但事实证明,至少在HP-UX 11.21上又是一句空话。
我们来看看control file sequential read的官方解释
引用
Reading from the control file. This happens in many cases. For example, while:
*Making a backup of the control files
*Sharing information (between instances) from the control file
*Reading other blocks from the control files
*Reading the header block
分享到:
相关推荐
### Oracle AWR 分析之 enq: IV - Contention 案例解析 #### 一、概述 在Oracle数据库管理中,AWR (Automatic Workload Repository) 是一个非常重要的工具,用于诊断性能瓶颈并帮助优化数据库操作。本文将详细介绍...
【故障处理】enq: PS - contention 是一个Oracle数据库中常见的等待事件,通常与并行服务器(Parallel Server)的资源竞争有关。这篇博客主要讲解如何解决这类问题,并提供了详细的故障分析和解决步骤。 1. **等待...
cause:当插入新的索引条目时,发现索引块中没有足够的空间容纳新的索引条目,索引块就会产生分裂(分为5-5分裂...这时就会表现为enq: TX - index contention。本例中索引块分裂属于5-5 分裂,此分裂可以通过awr报告观察
竞争增加会导致enq:SQ-contention事件发生次数增多,进而增加CPU使用率。 同时,DFSlockhandle等待事件也是由于数据文件锁定而造成的等待。它通常与数据库文件的锁定和解锁操作有关。当多个事务试图同时访问同一...
- **enq:DX-contention**:涉及数据对象的独占锁定竞争。 - **enq:SQ-contention**:序列对象的等待,常见于序列值的获取过程中。 ##### 2.3 Enqueue队列等待的解决策略 针对不同的Enqueue队列等待类型,可以采取...
这种等待事件通常是由于大量的并发事务竞争同一个数据块内的ITL资源导致的。解决此类问题的关键在于理解ITL的工作原理,并通过合理的参数调整和优化SQL执行计划来减少ITL的竞争。此外,定期监控数据库性能并及时调整...
- **Direct path read**:这是Oracle的快速路径插入,如果造成等待,可能是由于数据导入或大量DML操作。使用批量插入,或者在低并发时段进行大操作,可以减少等待。 ### 队列等待的基本知识 队列等待是数据库系统...
6. **询问(ENQ)** - 十进制:5 - 八进制:005 - 十六进制:05 - 二进制:00000101 - HTML实体:`` - 描述:用于请求对方发送确认或响应。 7. **收到通知(ACK)** - 十进制:6 - 八进制:006 - ...
当系统activity增加或者降低的时候,oracle SMON进程会自动ONLINE或者OFFLINE rollback segments。这样导致某些与undo segments相关的latch或者enqueue被...导致系统很多活跃session都开始等待enq: US - contention。
- **解释**:在数据传输中用于特殊字符的转义。 18. **设备控制1(DC1)** - **二进制**:00010001 - **八进制**:21 - **十进制**:17 - **十六进制**:11 - **字符**:DC1 (device control 1) - **解释**...
**ENQ (Enquiry, 请求)** - **二进制**: 0000101 - **十进制**: 5 - **十六进制**: 05 - **说明**: 用于请求对方发送确认信息。 ##### 7. **ACK (Acknowledgment, 收到通知)** - **二进制**: 0000110 - **十进制...
### 故障处理:Oracle_lhr_队列等待之TX - row lock contention #### 一、概述 在Oracle数据库管理中,“enq:TX-rowlockcontention”是一种常见的队列等待事件,通常与行级别的锁定冲突有关。这种冲突可能会导致...
ENQ (Enquiry) - 询问字符 - **ASCII值**: 5 - **用途**: 请求对方发送确认信号。常用于通讯协议中。 ##### 7. ACK (Acknowledgement) - 承认 - **ASCII值**: 6 - **用途**: 表示已成功接收消息。用于通讯协议中...
本篇博客主要聚焦于四种特定的序列等待事件:enq SQ - contention、row cache lock、DFS lock handle和enq SV - contention。 1. **enq SQ - contention**: 这个等待事件发生在多个会话尝试获取对序列(sequence...
- 锁等待情况(如ENQ: TX - ROW LOCK contention) Prometheus会定期抓取oracledb-exporter提供的这些指标,并根据预设的规则进行报警和可视化展示。你可以利用Prometheus的Alertmanager设置告警规则,当特定指标...
- 使用`v$session_wait`视图查找等待类型的`ENQ: TX - row lock contention`或`ENQ: TX - deadlock`。 - 查询`v$deadlock`和`v$deadlock_monitor`视图获取死锁信息。 - 执行`DBMS_LOCK.MONITOR`过程来监控死锁...
- **解释**:ENQ用于发送方询问接收方是否准备好接收数据。 7. **回应(ACK)** - 二进制: 00000110 | 十进制: 06 | 十六进制: 06 - **解释**:ACK表示接收方已经成功接收到数据并确认无误。 8. **响铃(BEL)** - ...
- 等待资源:比如enq: TM - contention和library cache lock。 - 用户进程等待:比如log file parallel write和log file sync。 ### OWI性能调优方法 针对Oracle等待事件进行调优,通常需要一系列的分析和诊断步骤...