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

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

почитайте про
DBMS_SCHEDULER.SET_ATTRIBUTE
атрибут max_run_durationа как потом проверить, отработало или нет?
...
Рейтинг: 0 / 0
15.09.2017, 13:18
    #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
15.09.2017, 13:21
    #39521809
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение по времени выполнения рефреша
Aliona,

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

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

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


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