powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как бы жрать меньше UNDO?
20 сообщений из 20, страница 1 из 1
как бы жрать меньше UNDO?
    #39307013
grok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть процедура меняющая дохрена данных (допустим, 2 млн записей)
если произошла ошибка - надо откатить всё
проблема в том, что если не коммитить, будет плохо с UNDO

есть какие варианты выкрутиться из этой ситуации ?
...
Рейтинг: 0 / 0
как бы жрать меньше UNDO?
    #39307019
grok,

менять обратно.
...
Рейтинг: 0 / 0
как бы жрать меньше UNDO?
    #39307024
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grokесть какие варианты выкрутиться из этой ситуации ?

Засунуть ещё один диск в дисковую полку.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как бы жрать меньше UNDO?
    #39307050
проходил мимо...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grokесли не коммитить
Не секрет, что роллбэк нужно делать по-реже,
Нужно делать по-чаще коммит.
...
Рейтинг: 0 / 0
как бы жрать меньше UNDO?
    #39307057
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проходил мимо...Нужно делать по-чаще коммит.

Ага, особенно когда "если произошла ошибка - надо откатить всё" или когда другие сессии выдают долгоиграющие селекты из изменяемой таблицы .

SY.
...
Рейтинг: 0 / 0
как бы жрать меньше UNDO?
    #39307089
Avotge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. Постараться писать так, чтобы ошибок все-таки не было или только если совсем попа типа диск/сеть отвались.
2. Смотря какой характер носит сама обработка данных и насколько действительно большие объемы, но например как вариант:
попытаться новые данные писать в отдельную патицию или временную таблицу, если вылезла ошибка,
то дропаем патицию или транкейтим темповую таблицу. В общем смотря что делает процедура ),
если ошибок не вылезло, то при необходимости кладем "хорошие" данные в рабочие таблицы.
Понятно, что двойная работа и совсем негуд, если таблиц в обработке много, зато быстрый "откат" :)
...
Рейтинг: 0 / 0
как бы жрать меньше UNDO?
    #39307121
Nobody1111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я пробовал такой вариант: завести 2 undo и переключать на время тяжёлой транзакции на запасной, а потом возвращать обратно, чтобы другие транзакции не споткнулись.
......оракл при таких динамических переключениях undo глючил, зараза, не по детски. В общем, не завелось, на 11.2.0.4, по крайней мере.

Другой вариант в близком направлении - олдскульное ручное управление роллбэк сегментами вместо автоматического undo.
...
Рейтинг: 0 / 0
как бы жрать меньше UNDO?
    #39307152
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И как это поможет?
...
Рейтинг: 0 / 0
как бы жрать меньше UNDO?
    #39307226
Nobody1111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это защищает сторонние транзакции от переполнения undo. Если сессия с очень большим размером транзакции не вписалась в имеющееся дисковое пространство, отведённое под undo, то она сама себе злобное буратино.
...
Рейтинг: 0 / 0
как бы жрать меньше UNDO?
    #39307329
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nobody1111Это защищает сторонние транзакции от переполнения undo.Как?
Тем более, что:Nobody1111Если сессия с очень большим размером транзакции не вписалась в имеющееся дисковое пространство, отведённое под undo, то она сама себе злобное буратино.
...
Рейтинг: 0 / 0
как бы жрать меньше UNDO?
    #39307361
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
как бы жрать меньше UNDO?
    #39307432
Nobody1111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав ЛюбомудровNobody1111Это защищает сторонние транзакции от переполнения undo.Как?
Тем более, что:Nobody1111Если сессия с очень большим размером транзакции не вписалась в имеющееся дисковое пространство, отведённое под undo, то она сама себе злобное буратино.

Ключевое слово - сторонние. Если некая сессия запустила транзакцию размером 100500 Gb, то остальные не виноваты и по возможности не должны испытывать проблем.


123ййSY,
Нужно делать почаще коммит

Он, возможно, не в курсе, что был в свое время мультфильм с очень популярной песенкой:

YouTube Video
...
Рейтинг: 0 / 0
как бы жрать меньше UNDO?
    #39307541
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYпроходил мимо...Нужно делать по-чаще коммит.
Ага, особенно когда "если произошла ошибка - надо откатить всё" или когда другие сессии выдают долгоиграющие селекты из изменяемой таблицы .
Ну про сценарии загрузки - все вроде понятно, надо так или иначе помечать вливаемые данные и по необходимости удалять.
Варианты:
- грузим в отдельную табличку, при успехе - exchange partition с целевой, при неудаче - truncate
- грузим с fk на запись о задании, выборка данных - join с заданием в статусе "успех", зачистка - неспешный delete.

А вот в сценарии "меняет много данных" (с кучей update во многих таблицах) - то можно лишь по возможности разделить большую транзакцию на целостные куски и выполнять по частям.
В биллинге, к примеру, можно оперировать группами лицевых счетов.

Из паллиативов - можно попробовать отключить ненужные данной конкретной мегатранзакции индексы на задействованных таблицах, пересмотреть используемые update на тему исключения ненужных (необязательных) set a=..., заменить delete на update set del_flag='Y' (включить в PK), само удаление выполнить отдельной транзакцией по факту успеха первой.
Ну и так далее в общем направлении - избегать лишних модификаций, делить на части, фиксировать промежуточные непротиворечивые итоги.
...
Рейтинг: 0 / 0
как бы жрать меньше UNDO?
    #39307555
Nobody0000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Nobody1111Вячеслав Любомудровпропущено...
Как?
Тем более, что:пропущено...


Ключевое слово - сторонние. Если некая сессия запустила транзакцию размером 100500 Gb, то остальные не виноваты и по возможности не должны испытывать проблем.



вах шайтан!!1 взломал ядро оакл и научился выделять для каждой сессии свое андо ??!
...
Рейтинг: 0 / 0
как бы жрать меньше UNDO?
    #39307562
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nobody0000вах шайтан!!1 взломал ядро оакл и научился выделять для каждой сессии свое андо ??!
Ну, положим, ломать для этого ничего не надо - ядро не просто умеет назначать сессии сегмент отката, но предоставляет штатную рукоятку для этого:
Код: plsql
1.
set transaction use rollback segment <segment>


Более того, во времена, когда трава была зеленее... Короче, когда вместо слова UNDO ораклоиды пользовались буквосочетанием RBS - таки рекомендовалось иметь один-два больших сегмента отката для толстых транзакций, назначаемых посредством set transaction.
В современных версиях для этого пришлось бы отключить automatic undo management, но сам функционал-то никуда не делся...
...
Рейтинг: 0 / 0
как бы жрать меньше UNDO?
    #39307573
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз спрошу -- зачем?
От ORA-01555 это никак не спасает
Транзакция, сколько бы она UNDO не просила, запускается не от скуки, а чтоб все-таки отработать. Поэтому как не вертись, место в UNDO ей и остальным предоставить все равно надо.
Единственный разумный довод -- держать этот сегмент в отдельном ТП, которое можно будет по завершению грохнуть.
Но если это действо на регулярной основе, то придется повторять это постоянно (новое ТП, отдельный сегмент, дропнуть ТП) -- не проще уж предоставить сразу достаточно места.
...
Рейтинг: 0 / 0
как бы жрать меньше UNDO?
    #39307582
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровЕще раз спрошу -- зачем?
От ORA-01555 это никак не спасает
Сегодня - "низачем".
Когда-то было полезно.
Избавляло не от 1555, а от исчерпания места в rbs.
И не в ТП rbs-ы лежали, не в ТП... ;)
...
Рейтинг: 0 / 0
как бы жрать меньше UNDO?
    #39307606
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ога, в воздухе болтались
...
Рейтинг: 0 / 0
как бы жрать меньше UNDO?
    #39307654
Nobody1111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав ЛюбомудровЕще раз спрошу -- зачем?
От ORA-01555 это никак не спасает
Транзакция, сколько бы она UNDO не просила, запускается не от скуки, а чтоб все-таки отработать. Поэтому как не вертись, место в UNDO ей и остальным предоставить все равно надо.
Единственный разумный довод -- держать этот сегмент в отдельном ТП, которое можно будет по завершению грохнуть.
Но если это действо на регулярной основе, то придется повторять это постоянно (новое ТП, отдельный сегмент, дропнуть ТП) -- не проще уж предоставить сразу достаточно места.

Спасает другие сессии, выполняющие свои транзакции DML, от ORA-30036. Однако топикстартер не обозначил ошибку ORA-, с которой он хочет бороться в ситуации, когда большая транзакция должна откатиться.
И не обязательно сегмент, можно

alter system set undo_tablespace=<резервное анду>

при автоматическом undo_management. Правда, глючит это, я уже писал. А от ORA-1555 при таком варианте помогло бы undo_retention иметь индивидуальный для каждого undo ТП, а не общесистемный. Но этого нет (или пока нет).
...
Рейтинг: 0 / 0
как бы жрать меньше UNDO?
    #39307662
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nobody1111А от ORA-1555 при таком варианте помогло бы undo_retention иметь индивидуальный для каждого undo ТП, а не общесистемный. Но этого нет (или пока нет).Вот, именно этого я и ждал (просто раньше был распространен миф, что отдельный большой ROLLBACK-сегмент для длительной транзакции помогает от 1555).
Теперь расскажи, чем помогло бы индивидуальное UNDO_RETENTION
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как бы жрать меньше UNDO?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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