Ваше UNDO
табличное пространство в этом случае кажется узким местом.
Проверьте, сколько времени потребуется, чтобы сделать ROLLBACK
после удаления данных. Если это занимает время, сопоставимое со временем самого запроса (в пределах 50%
), то это, безусловно, так.
Когда вы выполняете запрос DML
, ваши данные (как исходные, так и измененные) записываются в журналы повторов, а затем применяются к файлам данных и к табличному пространству UNDO
.
Удаление миллионов строк CLOB
требует копирования нескольких сотен мегабайт, если не гигабайт, в табличное пространство UNDO
, которое занимает десятки секунд.
Что вы можете сделать с этим?
- Создание более быстрого
UNDO
: поместите его на отдельный диск, сделайте его менее разреженным (создайте файл данных большего размера).
- Используйте
ROLLBACK SEGMENTS
вместо управляемого UNDO
, присвойте ROLLBACK SEGMENT
для этого самого запроса и введите SET TRANSACTION USE ROLLBACK SEGMENT
перед выполнением запроса.
Если это не так, то я. е. ROLLBACK
выполняет намного быстрее, чем сам запрос, затем попытайтесь поиграть с вашими REDO
параметрами:
- Увеличьте размер буфера
REDO
с помощью параметра LOG_BUFFER
.
- Увеличьте размер ваших лог-файлов.
- Создайте свои файлы журналов на отдельных дисках, чтобы чтение из первого файла данных не мешало записи во второй и т. Д.
Обратите внимание, что UNDO
операции также генерируют REDO
, поэтому все равно полезно делать все это.
NOLOGGING
, рекомендованный ранее, бесполезен, поскольку он применяется только к определенному набору операций, перечисленных здесь , DELETE
, не являющимся одной из этих операций.