我有一个包含大约100k条记录的表,并且我想要删除一些行,问题在于DELETE
语句运行速度非常慢 - 它在30分钟内未完成。但select
声明是在1秒内返回。删除语句在Oracle中非常缓慢
的SELECT
声明如下:
select * from daily_au_by_service_summary
where summary_ts >= to_date('09-04-2012','dd-mm-yyyy')
order by summary_ts desc;
和DELETE
声明如下:
delete from daily_au_by_service_summary
where summary_ts > to_date('09-04-2012','dd-mm-yyyy');
此表在summary_ts
拥有的唯一指标。
可能是什么原因?
编辑:
SESSION_ID ORACLE_USERNAME OS_USER_NAME OBJECT OWNER OBJECT_NAME OBJECT_TYPE LOCKED_MODE
---------- ------------------------------ ------------------------------ ------------------------------ -------------------------------------------------------------------------------------------------------------------------------- ------------------- -----------
213 T03RPT elou T03RPT DAILY_AU_BY_SERVICE_SUMMARY TABLE 3
203 T03RPT elou T03RPT DAILY_AU_BY_SERVICE_SUMMARY TABLE 3
202 T03RPT elou T03RPT DAILY_AU_BY_SERVICE_SUMMARY TABLE 3
190 T03RPT elou T03RPT DAILY_AU_BY_SERVICE_SUMMARY TABLE 3
189 T03RPT elou T03RPT DAILY_AU_BY_SERVICE_SUMMARY TABLE 3
188 T03RPT elou T03RPT DAILY_AU_BY_SERVICE_SUMMARY TABLE 3
187 T03RPT elou T03RPT DAILY_AU_BY_SERVICE_SUMMARY
如何杀死这些会话:表是由多届锁定?
在我锁定表的会话结束后,问题已解决,感谢所有的帮助。 -
你是如何确定它没有完成的?也许它已经完成,但没有提交,并且您看不到从其他连接发生删除直到它被提交。 – 2012-04-11 07:25:14
我在sqlplus控制台中运行它,它只是没有返回。所以我认为该声明仍在执行中。 – 2012-04-11 07:28:23
杀害会话是一个完全不同的话题。请提出一个新问题(以便其他人可以更容易地找到该解决方案)。然后,从这个问题添加一个链接到新的链接。 – 2012-04-11 08:00:32