Deadlock found when trying to get lock

Deadlock found when trying to get lock; try restarting transaction (1213)
Запрос: UPDATE cscart_categories SET cscart_categories.product_count = ( SELECT COUNT(*) FROM cscart_products_categories WHERE cscart_products_categories.category_id = cscart_categories.category_id) WHERE cscart_categories.category_id IN (5660, 778)

столкнулся с такой же проблемой, есть решение?

Добрый день.

У нас версия cs-cart 4.12.2, та же проблема:

База данных (Ошибка)
Внимание: Deadlock found when trying to get lock; try restarting transaction (1213)
Запрос: UPDATE cscart_commerceml_import_entities SET process_id = ‘60f96842970d14.23265083’ WHERE import_id = 125 AND entity_type = ‘product’ AND entity_id = ‘wtbj03sxhiYJGeFYCHlU50’

index.php (fn_dispatch): 25
app/functions/fn.control.php (fn_run_controller): 434
app/functions/fn.control.php (include): 685
app/addons/commerceml/controllers/frontend/commerceml.php (dispatch): 251
app/addons/commerceml/src/CommandBus.php (handleCommand): 56
app/addons/commerceml/src/CommandBus.php ({closure}): 132
app/addons/commerceml/schemas/cml/commands.php (handle): 59
app/addons/commerceml/src/Commands/AImportCommandHandler.php (getQueue): 92
app/addons/commerceml/src/Storages/ImportStorage.php (findNextRecord): 368
app/addons/commerceml/src/Repository/ImportEntityRepository.php (query): 155
app/Tygh/Database/Connection.php (throwError): 518

@cs-cart_team @pavel.sh Добрый день. Пожалуйста, взгляните на тему и порекомендуйте, как можно траблшутить проблему.

Нужно создать тикет в Help desk. В рамках форума мы, к сожалению, не сможем изучить эту проблему

Можно проверить тип движка у таблиц:
cscart_commerceml_imports
cscart_commerceml_import_entities
cscart_commerceml_import_entity_map
cscart_commerceml_import_removed_entities

У нас было обращение от клиента, в магазине которого эти таблицы были сконвертированы в InnoDB. В этом случае решение - конвертировать таблицы обратно в MyiSAM.

это архитектурная ошибка, советы перейти на MyiSAM примерно как советовать больным пить аспирин при инсульте, лок всей таблице ускорит агонию уже в других местах.

3 лайка

самое простое решение использовать транзакции (дописать), если MyiSAM, то перевести в innodb, скорее всего лок идет на таблицу, написать процедуру которая будет снимать лок после 2 минут автоматом, это боль карта при малейшей нагрузке, особенно с такими запросами как в первом посте :joy:

1 лайк

Могли бы поподробнее рассказать, что можно сделать? Примерно в каких файлах копаться и что там делать.

Ни в коем случае не проявляю токсичность.
Вам отписали решение довольно детально.
Если вы не поняли о чём речь, то вам скорее нужно передать вышеприведённый текст разработчику.

Как думаете, если бы у меня был разработчик, я бы задавал подобные вопросы на форуме?