Здравствуйте. Имею небольшой сервер на node.js+mysql. использую движок
mysqljs. Сам сервер парсит данные раз в минуту с некоторых сайтов и складывает их в таблицу бд(таблица получается относительно небольшой, 8к строк и около 15 столбцов). А также делает выборку из бд в таблицу html. С некоторого времени стали появляться ошибки "Error: ER_LOCK_DEADLOCK: Deadlock found when trying to get lock; try restarting transaction". Погуглив, я понял, что необходимо повторить запрос и ошибка уйдёт. С конкретным запросом то оно вроде пропадает, но тут же появляется новая ошибка лока, уже с другим запросом.
Также гугл подсказал делать commit'ы. Но возникает вопрос. На движке mysqljs вроде как нет возможности отправлять сразу несколько запросов вида
BEGIN;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summmary=@A WHERE type=1;
COMMIT;
И приходится открывать pool, и делать много connection.query() запросов один за одним. Всё это ужасно не удобно.
Есть ли какой-то деликатный способ обхода ER_LOCK_DEADLOCK на nodejs?
Есть ли способ сбросить непроведённые транзакции?
Почему возникают дедлоки? Из-за того что sql не успевает обрабатывать данные? Если да, то поможет ли, если я создам новую таблицу и часть данных перенесу туда?
p.s. забыл написать, проверяю статус через "SHOW ENGINE INNODB STATUS", там выдаёт 3.5к строк текста, в которых написано что 140 локов висит