truncate表hang住(等待时间较长),出现enq:RO fast object reuse等待事件

有一个应用truncate表等待了一晚上,一个定时任务,跑了几年了,今天早上来发现昨晚没有执行完成,hang住了,查询发现等待事件 fast object reuse。

10.2.0.4的库

Bug 7385253 - Slow Truncate / DBWR uses high CPU / CKPT blocks on RO enqueue (文档 ID 7385253.8)

Bug 9761199 - PMON hang on ‘enq: ro - fast object reuse‘ (文档 ID 9761199.8),首先知道truncate table是DDL操作,会重置HWM,truncate table后,oracle会回收表和其表中所在的索引到initial 大小,也就是初始分配的segments大小

truncate和drop一样都是ddl语句, 操作立即生效,原数据不放到rollback segment中,不能回滚。

truncate table执行很慢可能有以下几个原因:

1.查看是不是DML操作锁定了某些记录;

2.segment header竞争;

truncate 表慢可能跟extent的数量有关系,比如说,你一个表 size 100M,每个10M ,10个extent,而又一个表 size 50M ,每个8K,6400个extent,那么,第二个表的truncate就会比第一个慢上好多

通常来说是由于extent 太多,truncate时在做回收extent的动作,这也是 local management比 dictionary management好的其中一点。如果担心下次碰到同样问题,可以考虑使用truncate table test reuse STORAGE 的语句,可以避免hung在回收extent上。就要用到分次回收的方式了, 比如说,100M的表,每次回收 20M,在感觉上可能好点。

truncate table t4 reuse STORAGE ;

alter table test_tun deallocate unused keep 80M;

alter table test_tun deallocate unused keep 60M;

alter table test_tun deallocate unused keep 40M;

alter table test_tun deallocate unused keep 20M;

truncate table test_tun  drop storage;

如果truncate table 非常慢 ,可以按照以下方法来诊断:

1.请查询 相应的session 在 v$session_wait 视图中的等待事件;

2.可以用oradebug hanganalyze分析系统挂起的原因;

3.如果为了试验目的,更可以做个10046 level 8的event。

truncate的时候,dbwr占用cpu高不高?可以试一下下面文档中的workround (alter system flush buffer_cache; 后再truncate),如果生效应该就是了,你可以升到10.2.0.4.3。

是不是这个bug不好说,如果日志的大小不足导致日志切换hang住,引起dbwr的等待,出现不少free buffer busy的等待,而truncate又要做checkpoint,所以这时候前台进程也要等待dbwr,导致enqueue RO的wait变长。

MOS文档内容:

进程监控进程:负责服务器进程的管理和维护工 作,在进程失败或连接异常发生时该进程负责以下一些清理工作:

1.回滚没有提交的事务;

2.释放所持有的当前的表或行锁;

3.释放进程占用的SGA资源;

4.监视其他oracle的后台进程,在必要时重启这些后台进程;

5.向oracle TNS监听器注册刚启动的实例。如果监听器在运行,就与这个监听器通信并传递,如服务名和实例的负载等参数,如果监听器没有启动,进程监控(PMON)会定期地尝试连接监听来注册实例。

时间: 2024-10-23 06:47:01

truncate表hang住(等待时间较长),出现enq:RO fast object reuse等待事件的相关文章

OGG的Director web hang住的两种解决方法

OGG的Director web hang住的两种解决方法: OGG的Director web hang住的解释:是指web界面能登陆进去,但是看得刷新日期是很久之前的日期,并且该日期不变化. OGG的Director web hang住 的情况之一: 参考如下的mos文章: Director web displaying "Error 500-Internal Server Error". Domain log has Cannot open paging store. (Doc I

记一次数据库无法增删改趋于HANG住状态的故障诊断和处理

数据库无法增删改,包括v$transaction视图无法查询,类似于HANG的状态,我首先我通过查询v$session_wait视图,情况如下: SQL> select sid,event,p1,p2,p3,wait_time,seconds_in_wait,state from v$session_wait where wait_class <> 'Idle'; SID EVENT                                             P1      

12.2 删除物化视图的是hang住了

在drop mv 的时候如果hang住,可以启用10046进行跟踪,看其操作究竟是卡在哪一步?而我这一次遇到的场景,是卡在delete sys.mvref$_change_stats.这个表如果数据量达到百万以上,基本就很大可能出现性能问题,可以做清理.(执行语句:delete from sys.mvref$_change_stats where refresh_id=:B2 and mv_obj#=:B1) 解决办法: truncate table mvref$_stats; truncate

oracle表锁住 解锁办法

第一种方法: 用系统账户如sys      as  SYSDBA 登录进去 1.查看数据库锁,诊断锁的来源及类型:  select object_id,session_id,locked_mode from v$locked_object;  或者用以下命令:  select b.owner,b.object_name,l.session_id,l.locked_mode  from v$locked_object l, dba_objects b  where b.object_id=l.ob

Oracle数据库shutdown immediate被hang住的几个原因

实验操作环境: 操作系统:Red Hat Enterprise Linux ES release 4 (Nahant Update 6) 数据库 : Oracle Database 10g Release 10.2.0.4.0 – Production  32bit 今晚使用shutdown immediate(其实是执行stop_oracle.sh脚本关闭数据库,如下所示)关闭数据库的时候, 1: [[email protected] scripts]$ more stop_oracle.sh

OGG目标端复制Sequence时Hang住的问题

昨天遇到一个问题一个OGG的复制进程在复制序列(Sequence)时Hang住不动,进程状态一直是Running状态但是不往前进行复制,导致进程延迟6个多小时 GGSCI (ctm-3) 2> info all Program     Status      Group       Lag at Chkpt  Time Since Chkpt MANAGER     RUNNING                                            REPLICAT    RU

【翻译自mos文章】当 使用DCD 和TCPS时,rman duplicate hang住

当 使用DCD 和TCPS时,rman duplicate hang住. 来源于: RMAN Duplicate hangs when using DCD and TCPS (文档 ID 1676197.1) 适用于: Oracle Database - Enterprise Edition - Version 11.2.0.1 and later Information in this document applies to any platform. 症状: 在datafile copy 阶

NDMCDB数据库hang住故障分析 - cursor: pin S wait on X

问题描述: 上午刚刚到办公室,就有监控人员邮件反馈,昨晚NDMCDB407数据库被重启过,让我分析一下数据库重启的原因.由于昨晚业务有版本上线,所以短信警告关闭了,所以没有短信下发到我手机上,而且故障时相关人员也没有通知到我. 1     检查alert日志 从alert日志中,可以看到,先是在03:29时有一个job运行失败了: Fri Aug 22 03:29:29 2014 Errors in file/opt/oracle/diag/rdbms/ndmcdb/NDMCDB/trace/N

一次进程hang住问题分析。。。

这两天有同学使用数据校验工具时发现进程hang住了,也不知道什么原因,我简单看了看进程堆栈,问题虽然很简单,但能导致程序hang住,也一定不是小问题.简单说明下程序组件的结构,程序由两部分构成,dbchk和dbchk_inner,dbchk采用python代码实现,dbchk_inner采用C语言实现.dbchk负责并发控制,dbchk_inner则负责具体的校验任务.用户通过运行dbchk命令即可达到校验的目的.进程关系如下: $ pstree 18649 dbchk─┬─sh───dbchk