Длительные параллельные транзы при REPEATABLE-READ

whirlwind

TDD infected, paranoid
Длительные параллельные транзы при REPEATABLE-READ

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

Gas

может по одной?
можно и SELECT COUNT(*) ... FOR UPDATE
всё таки мешьше убьёт конкурентность чем LOCK или SERIALIZABLE
 
Сверху