Node.js MySQL соединение не освобождается должным образом
Я думаю, что мои связи не освобождаются должным образом. Иногда я получаю сообщение о том, что мой пул достиг своего предела. Кроме того, иногда случайный доступ к БД занимает более 15 секунд. Всякий раз, когда я проверяю, сколько соединений используется, используя pool._allConnections.length
, он никогда не возвращает ничего выше 60. Вот мой код:
const mysql = require('mysql');
const config = require('./config.json');
const pool = mysql.createPool({
connectionLimit : 999,
host: config.host,
user: config.user,
password: config.password,
database: config.database
});
const db = (() => {
_query = (query, params, callback) => {
pool.getConnection((err, connection) => {
if (err) {
callback(null, err);
} else {
connection.query(query, params, (err, rows) => {
connection.release();
if (!err) {
callback(rows);
} else {
callback(null, err);
}
});
}
});
};
return {
query: _query
};
})();
module.exports = db;
1 ответ
Я столкнулся с той же проблемой, и https://github.com/mysqljs/mysql/issues/1518 помогите мне. Линия уведомления
Да, это была проблема. Я звонил mysql.createPool на каждый запрос.
На самом деле вы импортируете db из query.js (скажем, ваш почтовый индекс) для запуска запроса. каждый раз, когда вы запускаете запрос, он создает новый пул. Для решения этой проблемы вы можете поместить блок кода createPool в app.js и поделиться им глобально или использовать в query.js в любом другом стиле кода. Ссылаясь на официальный документ https://github.com/mysqljs/mysql найти строку
Поскольку метод pool.query является сокращением для потока pool.getConnection -> connection.query -> connection.release(), вызывая pool.end() до завершения всех запросов, добавленных через pool.query,
позже я использовал это, чтобы остановить головную боль при выпуске соединения