Обновление представления материализации, когда оно находится в состоянии NEED_COMPILE - PullRequest
0 голосов
/ 07 апреля 2019

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

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

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

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

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

1 Ответ

0 голосов
/ 14 апреля 2019

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

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