Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Получение доступа к данным открытой тразакции из другой транзакции / 9 сообщений из 9, страница 1 из 1
17.04.2021, 18:51
    #40063390
wvadik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение доступа к данным открытой тразакции из другой транзакции
Есть таблица-кэш, которая в фоном режиме обсчитывается отдельным процессом (сервисом).
В эту таблицу процедура в транзакции мержит данные и и потом селектит вставленную выборку, ожидая, что сторонний процесс в другой транзакции обсчитает эти данные.
Т.е. схема работы:
Сторонняя процедура (Процедура1) внутри себя вызывает процедуру (Процедура2), которая генерит выборку данных во временную таблицу, перекладывает для обсчета эти данные в таблицу-кэш и далее селектит эти данные в цикле, ожидая когда сторонний фоновый процесс обсчитает новые данные и изменит им статус. Как-то только данные обсчитываются, Процедура2 апдейт ими свою временную таблицу и работа продолжается.
Всё ломается, как только Процедура1 внутри себя объявляется явную транзакцию. получается, что вставленные при работе Процедура2 в таблицу-кэш данные не видны для фонового процесса, т.к. объявленная выше траназкция еще не закоммичена, а оно в свою очередь, не продолжается и стоит в ожидании расчета вставленных в таблицу-кэш данных. Получается замкнутый круг.
Возможно архитектурно если все переписать, то можно сделать всё иначе. Но в данном случае стиснутые рамки из-за универасальности механизма. "Процедура1" - это несколько процедур, внутри каких-то из них объявляется транзакция, внутри других нет явной транзакции. Таблица-кэш - необходмость для оптимизации однотипных расчетов из разных мест. Фоновый сервис - вооще на шарпе написанный расчет.

Есть какой-то вариант для реализации механизма для доступа к данным текущей транзакции, но который сам работает вне ее пределов?
...
Рейтинг: 0 / 0
17.04.2021, 19:53
    #40063411
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение доступа к данным открытой тразакции из другой транзакции
wvadik,

если транзакция не закрыта, то обработка не выполнена. Вполне справедливо, что внешний процесс не может получить доступ, иначе произойдет нарушение целостности, данные будут несогласованными.
Выясните причину, по которой открывается эта транзакция. Выясните причину, по которой на момент выполнения Процедуры 2 транзакция оказывается открытой. Если это ошибка, то понятно что делать.
...
Рейтинг: 0 / 0
17.04.2021, 19:54
    #40063412
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение доступа к данным открытой тразакции из другой транзакции
wvadik

Есть какой-то вариант для реализации механизма для доступа к данным текущей транзакции, но который сам работает вне ее пределов?

Поколения программистов, создававших MS SQL, боролись за то, чтобы это было невозможно.

Херней не майтесь.
...
Рейтинг: 0 / 0
17.04.2021, 20:22
    #40063423
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение доступа к данным открытой тразакции из другой транзакции
wvadik
внутри себя вызывает процедуру (Процедура2), которая генерит выборку данных во временную таблицу, перекладывает для обсчета эти данные в таблицу-кэш
Генерит выборку из данных, затронутых транзакцией?
Насколько большим может быть объем нагенеренного?
...
Рейтинг: 0 / 0
17.04.2021, 22:37
    #40063470
wvadik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение доступа к данным открытой тразакции из другой транзакции
Вопрос решился путем заливки в таблицу-кэш данных завернутых в json и переданных отдельной процедуре через линокванный на самого себя сервер. Эта процедура распарсивает полученный json и инсертит в таблицу-кэш. Так получилось из открытой транзакции выливать на общий доступ данные для того, чтобы другие процессы могли с ними работать, пока сгенерившая их транзакция ожидает, чтобы эти данные кто-то проапдейтил нужными значениями.
Полный анальный изврат.
Для тех, кто будет искать ответ на решение подобной проблемы - лучше так не делать и задуматься над архитектурой приложения, чтобы процессы были асинхронны: отдельно заливать в кэш, отдельно его обсчитывать и отдельно получать из него только посчитанные и помеченные к использованию данные.
...
Рейтинг: 0 / 0
18.04.2021, 13:30
    #40063562
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение доступа к данным открытой тразакции из другой транзакции
aleks222
Поколения программистов, создававших MS SQL, боролись за то, чтобы это было невозможно.

Из MS SQL уже выпилили TIL Dirty Read?
...
Рейтинг: 0 / 0
18.04.2021, 14:09
    #40063574
Критик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение доступа к данным открытой тразакции из другой транзакции
Сделали хрень )
Чем больше таких архитектурных артефактов, тем дороже будет стоить поддержка
...
Рейтинг: 0 / 0
19.04.2021, 15:02
    #40063901
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение доступа к данным открытой тразакции из другой транзакции
wvadik,

так может там не нужны транзакции вовсе.
...
Рейтинг: 0 / 0
19.04.2021, 17:46
    #40063963
Zelius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение доступа к данным открытой тразакции из другой транзакции
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Получение доступа к данным открытой тразакции из другой транзакции / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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