powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Коварные дедлоки - Deadlock found
5 сообщений из 5, страница 1 из 1
Коварные дедлоки - Deadlock found
    #38904474
Ark Bucky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Столкнулся с проблемой дедлоков на сайте-магазине

БД MariaDB 10.

Обработка заказов выглядит так:

1. START TRANSACTION;
2. UPDATE shop_items SET status=3, buyer_id=%BUYER_ID% WHERE id IN (SELECT item_id FROM shop_cart WHERE buyer_id=%BUYER_ID% AND item_type=%ITEM_TYPE%) AND status=2
3. списание баланса и прочее
4. END TRANSACTION;

Всё отлично работало, пока не увеличился потом покупателей - в часы пик в логах появились дедлоки на втором запросе:

Deadlock found when trying to get lock; try restarting transaction


Также есть запрос выполняющийся по крону раз в час:

UPDATE shop_order o
JOIN shop_items d ON o.item_id = d.id AND d.taxfree_accepted=0
SET o.check_status=5
WHERE o.item_type=%ITEM_TYPE% AND o.check_status=0;



Периодически ловлю дедлоки на нем.

Как с этим бороться?
...
Рейтинг: 0 / 0
Коварные дедлоки - Deadlock found
    #38904477
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ark Buckyв часы пик в логах появились дедлоки на втором запросе:И где этот второй запрос?
...
Рейтинг: 0 / 0
Коварные дедлоки - Deadlock found
    #38904480
Ark Bucky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2. UPDATE shop_items SET status=3, buyer_id=%BUYER_ID% WHERE id IN (SELECT item_id FROM shop_cart WHERE buyer_id=%BUYER_ID% AND item_type=%ITEM_TYPE%) AND status=2
...
Рейтинг: 0 / 0
Коварные дедлоки - Deadlock found
    #38904496
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, второй по номеру. Я думал, что "второй" в смысле два апдейта взаимоблокируются, первый указан, а второй нет.

Конкретного решения пока не вижу.
Есть два общих:
1) Оптимизировать запросы, чтобы они выполнялись быстрее и дедлоки происходили реже. В частности, возможно, для вашей версии нужно IN (SELECT ... ) переписать через JOIN.
2) Диагностировать дедлок и попытаться выполнить транзакцию еще раз.
...
Рейтинг: 0 / 0
Коварные дедлоки - Deadlock found
    #38904834
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
добавить order by в подзапрос
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Коварные дедлоки - Deadlock found
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]