日期:2014-05-17  浏览次数:20755 次

drop table 个别表极慢
因业务需要,在程序中需批量删除一些表,有时可能没有该表,有时可能表内数据很少,有时也可能有很多数据。但在执行时发现,执行到删除某个表(如A表)时,长时间不完成,一般要几十分钟(实际该表数据很少,有时数据库中没有该表),也执行其他表时,速度极快,时间有时不到1秒。不知什么原因?从何处检查?数据库为Oracle10i
------解决方案--------------------
表是不是很大?先把执行计划贴出来
------解决方案--------------------
是不是空间碎片太多了?查一下 v$session_waits ,在等待什么?建议最好在drop table 之前做一个 event trace ,trace 一下你的这个drop 到底做了什么,还有在drop 的时候看看cpu 和磁盘IO 的状态,是不是io 有什么问题
------解决方案--------------------
没了现场情况,不好分析

有可能是因为这个表有事务没有提交,或者其他程序占用,或者其他,感觉原因有很多

如果当时有现场可以通过等待事件深入分析
------解决方案--------------------
drop table 应该立刻返回的,感觉你的数据库存在问题,是本地库么,看看alert日志里有报错没有?


是否该表已经被删除,回收站里是否有,建议drop  ....purse试试看

一般来说删除不掉就是该表被锁,但是也应该返回错误的,不返回而卡住,这个需要对该session进行下跟踪,确定操作过程中遇到什么问题了
------解决方案--------------------
建议先truncate ,再drop。这肯定会快