@comalex3

Lock wait timeout exceeded; try restarting transaction?

Есть следующий запрос, в котором ,я ожидал, что будет выбираться одна запись браться блокировка, опять же на одну запись, ставить флаг - используется и отпускать блокировку на эту запись, но судя по ошибке
'Lock wait timeout exceeded; try restarting transaction'
, блокировка береться всей таблицы, а так как у меня процессов 300 одновременно пытаются получить запись с этой таблицы, это очень плохо.

begin;
            SELECT GetDistance('newhaven', area) as distance, id = (SELECT @proxy_id := id) from checkins
                WHERE last_checkin > DATE_SUB(NOW(), INTERVAL 5 MINUTE)
                  AND active  = 1
                  AND offline = 0
                  AND usage_flag = 0
             ORDER BY distance ASC, RAND() limit 1 FOR UPDATE;
             UPDATE checkins set usage_flag=1 where id=@proxy_id;
             commit;


Прошу совета, как лучше организовать данное дело.
Спасибо.
  • Вопрос задан
  • 515 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы