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

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

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

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

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

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

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

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

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

SY.

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

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

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

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

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

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

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

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

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

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

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

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


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