Материализованный вид в oracle DB

#oracle

#Oracle

Вопрос:

Мой менеджер на работе просит меня создать 50 материализованных представлений и устанавливать обновление каждые 15 минут, мой вопрос: повлияет ли одновременное обновление всех 50 MVS каждые 15 минут на производительность БД?

Спасибо

Комментарии:

1. Да, это повлияет на производительность, возможно, отрицательно. Но запрос ваших материализованных представлений также может повысить производительность, упростив извлечение этих данных из вашей базы данных.

2. спасибо @TimBiegeleisen за ваш полезный комментарий.

3. Необходимо ли обновлять их все одновременно? Возможно, некоторые из них можно было бы обновлять один раз в день, некоторые другие два раза в день, остальные каждый час, и только некоторые даже чаще. Это зависит от того, что они содержат. Например, данные о сотрудниках меняются довольно редко. Таблица «Заказы» меняется много раз за минуту. И т.д. Возможно, это стоит обсудить с менеджером.

Ответ №1:

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

Если вы используете быстро обновляемое материализованное представление (к которому вам следует стремиться, если вы хотите обновлять его часто), объем требуемой работы намного меньше — вам нужно работать только с данными, которые изменились с момента последнего обновления. Oracle вычислит все, что требует изменения, и изменит его в небольшом количестве инструкций SQL. Для 15-минутного окна изменений, вероятно, вносится не так много фактических изменений, и эти изменения будут обрабатываться с использованием пакетных операций гораздо эффективнее.

Однако… даже если вы сделали процесс обновления максимально быстрым, одновременная работа 50 элементов (даже в течение короткого периода) все равно многовато. Если всем им нужно выполнять работу процессора, то это 50 загруженных процессоров, которые должны быть запланированы ОС, а затем также необходимо запланировать все оставшиеся сеансы пользователей, которые пытаются выполнить работу (лицензирование Oracle CPU для этого было бы очень дорогим). Вот почему вы обычно ограничиваете количество заданий, которые могут выполняться одновременно, используя параметр job_queue_processes (хотя последние версии также помогут, если диспетчер ресурсов ограничит количество заданий за один раз) — установите для него разумное число в зависимости от того, сколько работы вы можете физически обрабатыватьсразу в фоновом режиме. Если вы используете быстро обновляемый материализованный вид, то обновление 50 не займет много времени, даже если Oracle обрабатывает их по одному.

Еще одно преимущество наличия быстро обновляемых материализованных представлений (если вы обновились хотя бы до версии 12.2) заключается в том, что вы можете иметь материализованные представления в реальном времени, это означает, что даже если они не обновлялись, ваши пользователи все равно могут постоянно видеть полностью обновленные данные без необходимости выполнения запроса- очень умный материал! Это может позволить вам реже обновлять некоторые из ваших материализованных представлений, но при этом данные всегда будут полностью синхронизированы.