我有一個包含大約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