whirlwind
TDD infected, paranoid
Длительные параллельные транзы при REPEATABLE-READ
Проведение платежа завернуто в транзакцию. В рамках этой же транзакции выполняются некоторые проверки, в частности - проверка на повторный платеж. Схематично выглядит примерно так
Стали проскакивать транзы, с небольшой разницей по времени (порядка нескольких секунд), где проверка на повторный платеж не срабатывает. Насколько я понимаю, проблема в паралельности. Одна транза началась раньше, но не успела зафиксировать изменения на момент старта второй транзы. То есть, тут надо либо LOCK TABLES, либо SERIALIZABLE?
Проведение платежа завернуто в транзакцию. В рамках этой же транзакции выполняются некоторые проверки, в частности - проверка на повторный платеж. Схематично выглядит примерно так
Код:
SELECT COUNT(*) FROM payment WHERE account=XXX AND payment_time>YYY
если >0 то rollback, если нет то дальше
запрос в банк (выполняется не быстро)
INSERT INTO payment .....
commit