powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Одна длинная транзакция или несколько батчей
9 сообщений из 9, страница 1 из 1
Одна длинная транзакция или несколько батчей
    #39616007
hfc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hfc
Гость
Добрый день.

С сервера приложений вставляются записи в 5 таблиц по 10-15 атрибутов(строковые до 200симв, числовые, даты) в каждой, вставляется по 100к-300к строк в каждую таблицу. Во время загрузки к этим таблицам в других транзакциях могут идти select запросы. Таких загрузок может идти несколько параллельных(разные транзакции).
В результате проверок на сервере приложений может возникнуть необходимость откатить все загружаемые данные в конце загрузки.

Вижу 2 варианта:

1. Вставка всех строк всех таблиц в одной транзакции, commit после вставки всех строк всех таблиц. При необходимости отката вызвать один rollback.
Удобно и быстро в плане реализации - достаточно вызвать один rollback для отката данных из всех таблиц, какие тут могут быть минусы? Ресурсов для UNDO TS хватает, блокировок вроде не должно быть, запросы будут только select во время загрузки, по идее могут возникнуть блокировки при параллельных загрузках.

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

Подскажите, пожалуйста, какой вариант лучше использовать исходя из описанных объемов, какие +/- я упустил? Пока что сделал по 1 варианту из за простоты.
...
Рейтинг: 0 / 0
Одна длинная транзакция или несколько батчей
    #39616044
Щ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Щ
Гость
Промежуточный коммит лучше.

Если в длинной транзакции что-то пойдёт не так, то если её обрывать и перезапускать то сначала придётся ждать длинного отката, а затем всё сначала начинать.

Бывали случаи в практике, когда что-то шло не так в длинной транзакции, например план у кого-то DELETE слетал, обнаруживали это когда уже транзакция вместо, скажем, запланированных N часов выполнялась 5*N часов. И оборвать нельзя, т.к. огромная задержка по времени даже до того момента пока её снова запустить можно будет. И ждать окончания долго.
...
Рейтинг: 0 / 0
Одна длинная транзакция или несколько батчей
    #39616426
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное, в первую очередь, надо оценить -- а можно ли проиденфицировать строки обработанные и подлежащие обработке
Если можно -- то можно и кусками по 1000-1000000, админы смогут спокойно свое пиво пить
...
Рейтинг: 0 / 0
Одна длинная транзакция или несколько батчей
    #39616446
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начнем с того что прежде всего транзакция это понятие бизнеса. Поэтому определи приемлем ли промежуточный коммит с точки зрения бизнес логики.

SY.
...
Рейтинг: 0 / 0
Одна длинная транзакция или несколько батчей
    #39616490
д0kХ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SYНачнем с того что прежде всего транзакция это понятие бизнеса. Поэтому определи приемлем ли промежуточный коммит с точки зрения бизнес логики.

SY.

В подавляющей массе бизнесового функционала - приемлем.

Мало смысла повторно проводить верификации 90+% содержимого пакетов.
...
Рейтинг: 0 / 0
Одна длинная транзакция или несколько батчей
    #39616507
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
д0kХ
В подавляющей массе бизнесового функционала - приемлем.

Мало смысла повторно проводить верификации 90+% содержимого пакетов.

Каких пакетов? Это ты о чем?

авторС сервера приложений вставляются записи в 5 таблиц по 10-15 атрибутов(строковые до 200симв, числовые, даты) в каждой, вставляется по 100к-300к строк в каждую таблицу. Во время загрузки к этим таблицам в других транзакциях могут идти select запросы.

Вот тут и основной вопрос. Что будет с точки зрeния бизнеса ecли "select запросы" будут видеть частично загруженные данные.

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

Если в длинной транзакции что-то пойдёт не так, то если её обрывать и перезапускать то сначала придётся ждать длинного отката, а затем всё сначала начинать.
Переводя на русский язык Ваша фраза означает: неумение написать рабочий код порождает неконсистентные, с точки зрения бизнеса, данные. Вы правы, именно так обычно и бывает.
...
Рейтинг: 0 / 0
Одна длинная транзакция или несколько батчей
    #39616719
hfc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hfc
Гость
Всем спасибо за ответы.
SYВот тут и основной вопрос. Что будет с точки зрeния бизнеса ecли "select запросы" будут видеть частично загруженные данные

По идее не будут. Можно вставлять данные во временную таблицу и потом их переносить в основную с помощью если проходят верификацию. Правда не уверен, есть ли в данном случае смысл от этого, убрав одну огромную вставку в основную таблицу добавляется другая - из временной таблицы :D. Буду тестить.
...
Рейтинг: 0 / 0
Одна длинная транзакция или несколько батчей
    #39616722
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hfc,

если ресурсов хватает, то чего парится, делать одной траезакцией

на всяк случай оценить время отката большой пачки, если приемлимо, то незачем усложнять/разбивать

.....
stax
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Одна длинная транзакция или несколько батчей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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