Столкнулся с этой ошибкой, когда запросов стало ну очень много. Все тразакции, что использую, завершаю.
Mysql показывает в thread Connections 1 (1 активное подключение). Лимит max_connections 256
ProcessList тоже пустой (1 активная задача, и та от localhost)
Настройки pool в knex выглядят так:
{
pool: {
min: 4,
max: 256
}
}
Бд находится на другом сервере. Что уже тоько не гуглил, в коде запихнул параллельные запросы в единую очередь, но даже это не помогло.
Вот метод, в котором ошибка появляется
insertOrUpdate = async (tableName, rows) => {
this.countRequests += 1;
this.addWaiting();
await this.db.transaction((trx) => {
const queries = rows.map((tuple) => {
const insert = trx(tableName).insert(tuple).toString()
const update = trx(tableName).update(tuple).toString().replace(/^update(.*?)set\s/gi, '')
return trx.raw(`${insert} ON DUPLICATE KEY UPDATE ${update}`).transacting(trx)
})
return Promise.all(queries).then(trx.commit).catch(trx.rollback)
});
this.removeWaiting();
return
}