На сайте используется расширение “Парсер прайсов”, в котором на кроне поставлена задача импорта и обновления каталога через таблицу 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) возникает при наличии в базе данных тупиковой ситуации, которая препятствует успешному завершению транзакции.
Возможные причины:
Проблемы параллелизма: несколько транзакций пытаются одновременно получить доступ к одному и тому же набору ресурсов.
Долгие транзакции: если транзакция удерживает блокировки ресурсов в течение длительного времени, это увеличивает шансы на возникновение тупика.
Неэффективная индексация: неадекватная индексация может приводить к сканированию таблиц и увеличивать шансы на возникновение тупиков.
Для устранения ошибки можно попробовать следующие решения:
Перезапустить транзакцию.
Оптимизировать запросы.
Использовать транзакции разумно.
Настроить уровни изоляции.
Мониторить и анализировать тупики.
У нас в карте это полагаю все три причины - долгие запросы довольно давняя и большая головная боль. А теперь несколько парсеров одновременно работают с одними и теми же таблицами через долгие запросы - с таблицами, в которых и индексация не до конца продумана - в этом случае рано или поздно ваша ошибка непременно случится…
Что нам нужно сделать, чтобы этой проблемы не возникало? Есть особенности или ограничения на импортируемый прайс?
Обновить что-то нужно? На какой версии cs-карт и модуля парсера прайсов все работает стабильно без каких-либо зависаний и дедлоков?
Можно ли у Вас скачать/купить/заказать нужный патч у Вас как представителя компании-разработчика данного модуля?
Какие есть временные варианты решения этой проблемы? Может, есть модули у Вас, которые могут автоматически дробить файл импорта и поочередно запускать процесс импорта?
Эти вопросы решаются через Вашу техподдержку? что нам потребуется для получения помощи?