powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ограничение по времени выполнения рефреша
15 сообщений из 15, страница 1 из 1
Ограничение по времени выполнения рефреша
    #39521007
Tesamid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, обращаюсь за советом по следующему вопросу:
есть некоторая джоба, которая запускает хранимую процедуру, в которой выполняются некоторые действия в цикле, затем запускается рефреш материализованного представления с помощью DBMS_MVIEW. Проблема заключается в том, что система испытывает просадки производительности, и при определенных обстоятельствах рефреш матвью может вылиться в длительное ожидание его завершения и тормоза.
В связи с этим, хотелось бы иметь возможность остановить рефреш по истечении определенного промежутка времени, главным условием должно быть то, что процедура, в которой выполняется рефреш, должна прекратить свою работу по истечению отведенного времени, вплоть до прихлопывания оракловой сессии. Пока видется два решения: либо каким-то образом периодически проверять сколько по времени уже выполняется процедура, в которой запускается рефреш, либо как-то ограничить сам рефреш по времени. Но конкретной реализации, к сожалению, нет. Хотелось бы услышать ваши мнения по этому вопросу. И еще небольшой вопрос: какой на ваш взгляд необходимый минимум навыков оптимизации для программиста Оракл? Если что, версия Oracle DB 11.2. Спасибо!
...
Рейтинг: 0 / 0
Ограничение по времени выполнения рефреша
    #39521058
Влюленные в обновление матвью часов не наблюдат
...
Рейтинг: 0 / 0
Ограничение по времени выполнения рефреша
    #39521088
Фотография Vladimir Filin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tesamid,
Вам оно виднее, понятное дело, однако странно получится: если не успели обновить, то придётся откатить ВСЮ транзакцию, что может превысить уже потраченное время. Если промежуточный коммит, то данные в раскоряку встанут, опять же транзакционность нарушите. Решите с админим, может лучше ресурсы лимитировать для обновления. Ещё посмотрите:
- на "Fast" (точнее инкрементальное, а не быстрое!) обновление, специфический режим и не доделанный имхо, НО работать с ним точно можно
- что в атрибуте обновления атомик/не атомик, это влияет на доступность МВ во время обноврения и, соответственно, на время
- можно ли отключить какие-то индексы ПЕРЕД обновлением, потом их перестроить быстрее обычно
...
Рейтинг: 0 / 0
Ограничение по времени выполнения рефреша
    #39521199
Tesamid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vladimir FilinTesamid,
Вам оно виднее, понятное дело, однако странно получится: если не успели обновить, то придётся откатить ВСЮ транзакцию, что может превысить уже потраченное время. Если промежуточный коммит, то данные в раскоряку встанут, опять же транзакционность нарушите. Решите с админим, может лучше ресурсы лимитировать для обновления. Ещё посмотрите:
- на "Fast" (точнее инкрементальное, а не быстрое!) обновление, специфический режим и не доделанный имхо, НО работать с ним точно можно
- что в атрибуте обновления атомик/не атомик, это влияет на доступность МВ во время обноврения и, соответственно, на время
- можно ли отключить какие-то индексы ПЕРЕД обновлением, потом их перестроить быстрее обычно
Vladimir Filin, спасибо за ответ, согласен с вами, но бизнес требования таковы, что в первую очередь необходимо гарантировать установленное время выполнения процедуры. Да, есть промежуточные коммиты, но это опять же бизнес-логике не противоречит, откат не требуется. Матвьюху нет возможности привести к состоянию, когда будут выполнены все требования fast обновления. Сейчас рефреш запускается с atomic_refresh = true и перед обновлением удаляются индексы, затем заново создаются. Если выставить atomic_refresh = true как это может помочь прервать рефреш в определенный момент?
В целом первостепенная задача, это остановить выполение процедуры, в которой в том числе выполняется рефреш. Увеличение производительности рефреша, на мой взгляд, не сможет точно гарантировать, что время выполнение процедуры не превысит заданного предела, т.к. он тоже может меняться.
Может сделать костыль, создав джобу, которая периодически проверяет время существования определенной сессии и делает kill в случае, если время вышло?
...
Рейтинг: 0 / 0
Ограничение по времени выполнения рефреша
    #39521207
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а почему долго рефрешится?
Внутри куча UDF-функций, куча подзапросов с линками, план плохой?
...
Рейтинг: 0 / 0
Ограничение по времени выполнения рефреша
    #39521253
Tesamid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andreymx, UDF-не используются вообще, сама матвью строится на вьюхе, в которой есть два тяжелых CTE, которые затем джойнятся в нескольких подзапросах, объединенных union all. Пока думал над вашим постом, пришла мысль по ее оптимизации, но опять же, это не окончательное решение. Задача в том, чтобы останавливать процедуру по заданному времени, в первой ее части, где есть итерация это уже сделано, а вот для рефреша решения нет.
...
Рейтинг: 0 / 0
Ограничение по времени выполнения рефреша
    #39521644
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tesamidа вот для рефреша решения нет.
Вам же уже писали - откат транзакции которая много чего поменяла - плохая идея.
Хотя бы потому, что может вызвать еще большую нагрузку на сервер еще на дольше. :)
В принципе все просто - почитайте про Resource manager . Он может даже то, что Вы просите. Хотя, возможно, Вам будет достаточно менее радикального метода.
...
Рейтинг: 0 / 0
Ограничение по времени выполнения рефреша
    #39521657
Фотография Aliona
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TesamidМожет сделать костыль, создав джобу, которая периодически проверяет время существования определенной сессии и делает kill в случае, если время вышло?

почитайте про
DBMS_SCHEDULER.SET_ATTRIBUTE
атрибут max_run_duration
...
Рейтинг: 0 / 0
Ограничение по времени выполнения рефреша
    #39521783
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlionaTesamidМожет сделать костыль, создав джобу, которая периодически проверяет время существования определенной сессии и делает kill в случае, если время вышло?

почитайте про
DBMS_SCHEDULER.SET_ATTRIBUTE
атрибут max_run_durationа как потом проверить, отработало или нет?
...
Рейтинг: 0 / 0
Ограничение по времени выполнения рефреша
    #39521805
Фотография Aliona
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxAlionaпропущено...


почитайте про
DBMS_SCHEDULER.SET_ATTRIBUTE
атрибут max_run_durationа как потом проверить, отработало или нет?
Не знаю, не пробовала, но подозреваю, что вот этот запрос может показать результат
авторselect l.log_id "Log ID",
to_char(l.log_date, 'yyyy/mm/dd hh24:mi:ss.ff tzh:tzm') "Log Date",
L.operation "Operation",
L.STATUS "Status", L.user_name "User Name", L.CLIENT_ID "Client ID", L.global_uid "Global UID",
to_char(R.REQ_START_DATE, 'yyyy/mm/dd hh24:mi:ss.ff tzh:tzm') "Required Start Date",
to_char(R.ACTUAL_START_DATE, 'yyyy/mm/dd hh24:mi:ss.ff tzh:tzm') "Actual Start Date",
to_char(R.RUN_DURATION) "Run Duration",
R.INSTANCE_ID "Instance ID", R.SESSION_ID "Session ID", R.SLAVE_PID "Slave PID",
to_char(R.CPU_USED) "CPU Used", R.ADDITIONAL_INFO "Additional Info (Run)"
from DBA_SCHEDULER_JOB_LOG L, DBA_SCHEDULER_JOB_RUN_DETAILS R
where l.Owner = 'схема'
and l.job_name = 'джоб_с_REFRESH'
and l.log_id = r.log_id (+)
order by 1 desc

если атрибут придуман, значит, он кому-то нужет
...
Рейтинг: 0 / 0
Ограничение по времени выполнения рефреша
    #39521809
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aliona,

или через промежуточную табличку
в конце писать признак завершения и коммитить
...
Рейтинг: 0 / 0
Ограничение по времени выполнения рефреша
    #39521825
Tesamidсистема испытывает просадки производительностиКто на ком стоял? Система тормозит и долго матвью считается или матвью долго считается и вся система тормозит или только запросы к матвью тормозят во время рефреша?

Tesamidнеобходимый минимум навыков оптимизацииНавык замера времени.
...
Рейтинг: 0 / 0
Ограничение по времени выполнения рефреша
    #39521889
UDW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Остановить рефреш по таймеру - противоречит природе МВ.
Не устраивает "долгий" рефреш - определите причину задержки. Если проблема в записи на диск (к примеру), то шаманить надо в эту сторну. А если просто раздражает, то замените вьюхой обыкновенной.
...
Рейтинг: 0 / 0
Ограничение по времени выполнения рефреша
    #39522645
kaldorey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tesamid,

если накапливается много записей, то фаст рефреш становится не очень, желательно делать почаще, но меньше объемом. Это из собственного опыта и поиска по форумам с похожими проблемами.
Также, если не получается сделать из-за ограничений в одной матвью, можно сделать несколько, и на основе них делать нужную. Также в блогах находил, что люди вручную из матвью логов обновляют таблицы, обходя ограничения, но там много возни с очисткой и сохранением всего этого в консистентном состоянии.
...
Рейтинг: 0 / 0
Ограничение по времени выполнения рефреша
    #39527025
Tesamid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо за ответы, приняли решение все-таки сделать костыль с прекращением сессии джобы рефрешащей матвью.
Менеджер ресурсов нет возможности использовать, т.к., если не ошибаюсь, он настраивается на уровне схемы, а ограничение ресурсов должно быть индивидуальным для каждой сессии данного пользователя.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ограничение по времени выполнения рефреша
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]