Я ищу что-то похожее на транзакцию SQL.Мне нужны обычные средства защиты, которые обеспечивают транзакции, но я не хочу, чтобы это замедляло кого-либо еще.
Представьте, что клиент A подключается к БД и выполняет следующие команды:
BEGIN TRAN
SELECT (something)
(Wait a few seconds maybe.)
UPDATE (something)
COMMIT
InbetweenSELECT и UPDATE, клиент B приходит и пытается выполнить запрос, который в нормальных обстоятельствах в конечном итоге должен был бы ждать, пока A не завершится.
Я хотел бы, чтобы клиент A открылэто транзакция таким образом, что если B придет и выполнит свой запрос, клиент A обнаружит, что его транзакция немедленно откатывается, а последующие команды не выполняются.Клиент B будет испытывать только минимальную задержку.
(Обратите внимание, что SELECT и UPDATE - просто иллюстративные команды.)
Обновление ...
У меня высокий приоритетзадача (клиент B), которая иногда (раз в месяц) получает ошибку тайм-аута SQL, и задача с низким приоритетом (клиент A) с транзакцией, которая вызывает этот тайм-аут.Я бы предпочел, чтобы задача с низким приоритетом завершилась неудачно и была предпринята попытка в следующем цикле.
Я решил исправить эту проблему, полностью исключив транзакции и заменив их неформальным набором флагов.Запросы подвергались рефакторингу только для того, чтобы что-то делать, если был поднят правильный набор флагов, и я добавил что-то, что очистило заброшенные записи, что откат мог очистить в прошлом.
Я исправил проблемы с транзакциями, исключив транзакции.