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

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

За последние пару недель возникла проблема, когда произошло обновление MV, БД перешла к операции Peek IO. Загрузка ЦП стала тяжелой, что вызвало медлительность.

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

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

  • Может ли эта ситуация вызвать операцию Peek IO?
  • Что произойдет с журналами MV, когда сам MV находится в NEED_COMPILE состояние?
  • Вызывают ли журналы MV операцию Peek, когда фактический MV находится в состоянии NEED_COMPILE?
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
0
0
121
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Другие вопросы по теме