Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Job и трансакции  [new]
mezzanine
Member

Откуда:
Сообщений: 157
Добрый день.
Была задача запускать процесс генерации "кодов". Можно запустить процесс чтоб создал миллион таких кодов, операция довольно тяжелая и каждый код это запись в несколько таблиц. Выбрали для этого джобы, чтоб себе там часами крутилось и не мешало. Конфигурация джобов пройдена, спасибо форумчанам. Новая проблема это трансакции в джобах.
Насколько понял, и проверил импирически, вместе с джобом стартует трансакция. Нужно каждую успешную пачку из 1.000 кодов комитить, каждый ошибочно выгенерованый код откатывать т.к. это запись в несколько таблиц.
Для оповещения о статусе джоба написана процедура которая будет записывать данные в таблицу через loopback, такая автономная трансакция.

Собственно проблема с пачками и откатами:
Пачки. Если стартую свою трансакцию то все это ожидает коммита внешней транзакции, т.е. не вижу данных часами пока не закончится весь джоб. Коммичу внешюю но естественно счетчики трансакций не сходятся. Подозреваю что transaction log будет все это время пухнуть без физических коммитов, вложеные игнорируются.
Откаты. Тут на savepoint наверно можно. Не нагружает ли сильно сервер создание savepoint для каждой итерации и правильный ли это подход.
15 ноя 17, 15:59    [20956785]     Ответить | Цитировать Сообщить модератору
 Re: Job и трансакции  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30800
mezzanine
Насколько понял, и проверил импирически, вместе с джобом стартует трансакция.
Нет, джоб - это система запуска чего ли бо по расписанию или требованию. Например, периодически считать курсы валют с сайта РБС или сделать бакап базы.

Транзакции вы создаёте сами, или они создаются автоматически в той программе, которая запускается этим джобом.
mezzanine
Пачки. Если стартую свою трансакцию то все это ожидает коммита внешней транзакции, т.е. не вижу данных часами пока не закончится весь джоб. Коммичу внешюю но естественно счетчики трансакций не сходятся. Подозреваю что transaction log будет все это время пухнуть без физических коммитов, вложеные игнорируются.
Откаты. Тут на savepoint наверно можно. Не нагружает ли сильно сервер создание savepoint для каждой итерации и правильный ли это подход.
Вам нужно всё выполнять в транзакции? Например, что бы можно было всё откатить? Тогда делайте общую транзакцию, никакие savepoint не помогут. Лог будет расти.
Не нужны транзакции? Не делайте их, опять же никакие savepoint не нужны. Лог не будет расти.
15 ноя 17, 17:08    [20957126]     Ответить | Цитировать Сообщить модератору
 Re: Job и трансакции  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7399
mezzanine
Коммичу внешюю но естественно счетчики трансакций не сходятся.


Необходимо делать столько commit, сколько begin tran было до этого.
Для неявно открытой транзакции (сомневаюсь, что у Вас этот случай) достаточно одного commit.
15 ноя 17, 17:47    [20957309]     Ответить | Цитировать Сообщить модератору
 Re: Job и трансакции  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7399
автор
Новая проблема это трансакции в джобах.

Вам бы не стоило писать код в шагах заданий, а создать процедуры и вызывать уже процедуры в шаге.
15 ноя 17, 17:49    [20957314]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить