Материализовать обновление представления, когда оно находится в состоянии NEED_COMPILE

#database #oracle #database-performance #materialized-views

#База данных #Oracle #база данных-производительность #материализованные представления

Вопрос:

Я новичок в DB. У нас есть большой набор представлений материализации на нашем сервере prod. Все представления обновляются вручную каждые 3 часа в сохраненном процессе с помощью задания.

За последние пару недель возникла проблема, когда произошло обновление MV, DB перешла к операции ввода-вывода Peek. Загрузка процессора стала слишком высокой, что привело к замедлению.

Позже мы заметили, что из-за некоторых операций DML / DDL в прошлом с основными таблицами большая часть MV переходит в состояние NEED_COMPILE. Когда фактическое обновление происходит с этим состоянием, регистрируется ошибка «объект не найден».

Пожалуйста, посоветуйте мне соединить точки, чтобы понять проблему,

  • Может ли эта ситуация вызвать операцию ввода-вывода peek?
  • Что произойдет с журналами MV, когда сам MV находится в состоянии NEED_COMPILE?
  • Вызывает ли MV logs просмотр операции ввода-вывода, когда фактический MV находится в состоянии NEED_COMPILE?

Ответ №1:

Переход в состояние NEEDS_COMPILE является ожидаемым поведением при выполнении операции DML / DDL над основными таблицами. Используя «ОБНОВИТЬ ПРИ фиксации», вы получаете другое поведение, потому что эти MV обновляются одновременно с DML. В этом состоянии материализованное представление можно прочитать, но, конечно, обновленные записи не видны. Что касается проблем с производительностью, убедитесь, что журналы MV правильно проиндексированы (обычно требуются индексы в M_ROW $$ и XID $$, где XID $$ заменяет SNAPTIME $$ начиная с Oracle 11gR2). Для повышения производительности может потребоваться больше индексов. Что касается ошибки «объект не найден», вы должны предоставить подробную информацию о версии Oracle и точный журнал, который вы получаете.