У меня есть таблица с около 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
.
В чем может быть причина?
EDIT: таблица была заблокирована многими сессиями:
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
Как убить эти сессии?
Проблема была решена после того, как я убил сеансы, которые запирают стол, спасибо всем за помощь. -
Как вы определили, что это не закончилось? Возможно, это закончилось, но не было выполнено, и вы не видите, что удаление произошло из другого соединения, пока оно не было завершено. –
Я запустил его в консоли sqlplus, он просто не вернулся. поэтому я думаю, что это заявление все еще выполняется. –
Убивание сессий - совершенно другая тема. Задайте новый вопрос (чтобы другие люди могли более легко найти это решение). Затем добавьте ссылку с этого вопроса на новый. –