Информация об изменениях

Сообщение [FireBird] deadlock; update conflicts with concurrent update от 16.02.2016 12:37

Изменено 16.02.2016 12:42 sushko

Есть база данных с остатками товара. Клиент А открывает остаток товара для изменения, клиентское приложение блокирует этот остаток путем запуска запроса
UPDATE remainders SET id=id

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

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

Вопрос: как с этим бороться? Хотелось бы, чтобы после COMMIT'а клиента А транзакция клиента Б все-таки завершилась успешно.
[FireBird] deadlock; update conflicts with concurrent update
Есть база данных с наименованиями и количеством на складе товара. Клиент А открывает количество товара для изменения, его клиентское приложение блокирует это количество путем запуска запроса
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'а клиента А транзакция клиента Б все-таки завершилась успешно.