[FireBird] deadlock; update conflicts with concurrent update
От: sushko Россия  
Дата: 16.02.16 12:37
Оценка:
Есть база данных с наименованиями и количеством на складе товара. Клиент А открывает количество товара для изменения, его клиентское приложение блокирует это количество путем запуска запроса
UPDATE remainders SET id=id WHERE id=?

в транзакции с параметром NOWAIT.

После этого клиент Б пытается продать этот товар, его клиентское приложение уменьшает количество товара путем запроса
UPDATE remainders SET remainder=remainder-1 WHERE id=?

в транзакции БЕЗ параметра NOWAIT. Транзакция клиента Б подвисает в ожидании, когда транзакция клиента А освободит ресурс, и висит так долго (десятки секунд минимум). После этого клиент А завершает транзакцию COMMIT'ом, после чего клиент Б получает от FireBird ошибку "deadlock; update conflicts with concurrent update".

Вопрос: как с этим бороться? Хотелось бы, чтобы после COMMIT'а клиента А транзакция клиента Б все-таки завершилась успешно.
Бесплатный генератор отчетов для программ на C/C++
http://www.oxetta.com
Отредактировано 16.02.2016 12:42 sushko . Предыдущая версия . Еще …
Отредактировано 16.02.2016 12:39 sushko . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.