在linux系统下的oracle数据库里建立一个10万记录的新表(硬件:SCSI硬盘的新购买的服务器),然后对这个表执行 truncate table 表名,发现超慢,竟然花了6分多钟(执行这样的测试,是因为这个服务器执行一些truncate数据处理时,会出现连续执行几个小时一直运行的情况)。而拿这些测试表及数据到本地配置很普通的系统环境跟远程服务器一样的机器上测试,却只有0.1秒。碰到这个难题研究了很久,还是找不出原因,请各位帮忙指点下,谢谢!
调试欢乐多
1.drop并重新create该表
2.打修复Bug 3282805 的补丁
3.打9.2.0.5或更高版本的补丁
4.升级到10g
看看truncate时在等什么.
1.TRUNCATE TABLE XXXX REUSE STORAGE
2.ALTER TABLE XXXX DEALLOCATE UNUSED KEEP XXXXM这样一部分一部分的回收空间
不是HWM下,应该是所有属于表的extent
说明一下:上述问题用的是10g,多建了几个重做日志后,truncate明显快了,但10万记录的表也还要2~3秒;而且偶尔也还会出现一次truncate占用较久时间的情况(不知道是不是业务在跑引起资源竞争的问题还是...)。
请各位再帮忙分析指点下
v$session,v$lock,v$session_event看是否有哪些等待事件