Блокировка таблицы занимает больше времени для выполнения инструкции обновления Oracle - PullRequest
1 голос
/ 19 декабря 2011

У нас есть пакетный процесс, который читает базовые таблицы и выполняет некоторую агрегацию, а затем обновляет таблицы с измененным флагом.

У нас есть оператор обновления, который обновляет около 3 миллионов строк. Как часть бизнес-требования, нам нужно иметь блокировку на уровне таблицы для обновляемой таблицы.

UPDATE TABLE1 t1 SET PARAMETER1=(SELECT p1 from TABLE2 t2 where t1.ROW_ID=ROWIDTOCHAR(t2.ROW_ID)

Сегодня мы сделали следующее замечание: оператор обновления с блокировкой на уровне таблицы занимает 35 минут, а без блокировки на уровне таблицы - 20 минут.

Я не могу установить это наблюдение. Пожалуйста, помогите!

Ура, Dwarak

Ответы [ 2 ]

1 голос
/ 19 декабря 2011

Учитывали ли вы кеширование (как в базе данных, так и в файловой системе) при тестировании? В зависимости от того, что вы сделали, когда один оператор мог выполняться быстрее из-за данных, уже находящихся в памяти.

1 голос
/ 19 декабря 2011

Никто, кроме вашей базы данных, не может сказать вам причину вашего наблюдения. Вы должны будете сделать отчет AWR.

Однако не вполне возможно, что UPDATE будет работать дольше, потому что таблица была заблокирована ранее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...