Дэдлок при использовании парсера прайсов

На сайте используется расширение “Парсер прайсов”, в котором на кроне поставлена задача импорта и обновления каталога через таблицу xls.
Записей ~35 тыс.
что приводит к ошибке deadlock - не понятно.

Ошибки такие:

Спойлер
"PHP message: Tygh\Exceptions\DatabaseException: Deadlock found when trying to get lock; try restarting transaction <b>(1213)</b><p>CREATE TEMPORARY TABLE _product_filters_products_1 (PRIMARY KEY product_id (product_id)) ENGINE = MEMORY IGNORE SELECT products.product_id FROM cscart_products AS products  LEFT JOIN cscart_companies AS companies ON companies.company_id = products.company_id  INNER JOIN cscart_products_categories as products_categories ON products_categories.product_id = products.product_id INNER JOIN cscart_categories ON cscart_categories.category_id = products_categories.category_id  AND (cscart_categories.usergroup_ids = '' OR FIND_IN_SET(0, cscart_categories.usergroup_ids) OR FIND_IN_SET(1, cscart_categories.usergroup_ids)) AND cscart_categories.status IN ('A', 'H')   LEFT JOIN cscart_warehouses_sum_products_amount as war_sum_amount ON war_sum_amount.product_id = products.product_id LEFT JOIN cscart_warehouses_destination_products_amount AS warehouses_destination_products_amount ON" while reading response header from upstream,
Спойлер
Deadlock found when trying to get lock; try restarting transaction <b>(1213)</b><p=UPDATE cscart_products SET is_stock_split by_ warehouses = 'Y’ WHERE product id IN (SELECT product_id
FROM cscart_warehouses_products_amount WHERE product id IN (149917) GROUP BY product_id)</p> 

Прошу вас дать решение/инструкцию/рекомендацию/совет, как выявить проблемные транзакции и как с этим бороться

Ошибка MySQL 1213 (ER_LOCK_DEADLOCK) может возникать, когда в базе данных возникает взаимоблокировка, препятствующая успешному завершению транзакции. Взаимоблокировки могут быть вызваны проблемами параллелизма, длительными транзакциями и неэффективной индексацией. Чтобы исправить эту ошибку, вы можете повторить транзакцию, оптимизировать запросы, разумно использовать транзакции, настроить уровни изоляции, а также отслеживать и анализировать взаимоблокировки. Если вы столкнулись с ошибкой MySQL 1213, важно принять соответствующие меры для устранения взаимоблокировки и обеспечения бесперебойной работы вашей базы данных MySQL.

Добрый день,
благодарю Вас за ответ

Я понимаю, что такое дедлок, просто проблема в том, что я не знаю, с чего начать и что искать.

Если проблема с модулем Парсер прайсов, то что нужно дописать для того, чтобы не возникало взаимоблокировки транзакции? Были ли замечены такие проблемы в работе модуля и какие меры были приняты для устранения ошибки?

ну опять же идем в яндекс

Ошибка MySQL 1213 (ER_LOCK_DEADLOCK) почему возникает

Ошибка MySQL 1213 (ER_LOCK_DEADLOCK) возникает при наличии в базе данных тупиковой ситуации, которая препятствует успешному завершению транзакции.

Возможные причины:

  1. Проблемы параллелизма: несколько транзакций пытаются одновременно получить доступ к одному и тому же набору ресурсов.
  2. Долгие транзакции: если транзакция удерживает блокировки ресурсов в течение длительного времени, это увеличивает шансы на возникновение тупика.
  3. Неэффективная индексация: неадекватная индексация может приводить к сканированию таблиц и увеличивать шансы на возникновение тупиков.

Для устранения ошибки можно попробовать следующие решения:

  1. Перезапустить транзакцию.
  2. Оптимизировать запросы.
  3. Использовать транзакции разумно.
  4. Настроить уровни изоляции.
  5. Мониторить и анализировать тупики.

У нас в карте это полагаю все три причины - долгие запросы довольно давняя и большая головная боль. А теперь несколько парсеров одновременно работают с одними и теми же таблицами через долгие запросы - с таблицами, в которых и индексация не до конца продумана - в этом случае рано или поздно ваша ошибка непременно случится…

Попробуйте перегнать таблицы в innodb, это должно помочь.

1 лайк

Не помогло, импорт все равно зависает.

Продублирую здесь свои вопросы с уточнениями:

  • Что нам нужно сделать, чтобы этой проблемы не возникало? Есть особенности или ограничения на импортируемый прайс?

  • Обновить что-то нужно? На какой версии cs-карт и модуля парсера прайсов все работает стабильно без каких-либо зависаний и дедлоков?

  • Можно ли у Вас скачать/купить/заказать нужный патч у Вас как представителя компании-разработчика данного модуля?

  • Какие есть временные варианты решения этой проблемы? Может, есть модули у Вас, которые могут автоматически дробить файл импорта и поочередно запускать процесс импорта?

  • Эти вопросы решаются через Вашу техподдержку? что нам потребуется для получения помощи?

зависает всегда на одном и том же товаре?
тогда можно попробовать его удалить из файла или прям с сайта. Вдруг проблема рассосется.