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

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

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

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

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

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

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

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


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