Исчезают процессы (залитые сном) - PullRequest
0 голосов
/ 03 декабря 2018

У нас работает сервер, который имеет 2 подключения к базе данных, они оба созданы с использованием пула.

Пример:

var connection = mysql.createPool({
  host: config.mysql.host,
  user: config.mysql.user,
  password: config.mysql.pass,
  database: config.mysql.database
});

Однако естьМне сказали, что много запросов мы выполняем, но пул заботится об обработке / закрытии активных соединений.

Теперь соединения только накапливаются, а старые соединения не обрабатываются.В конце концов у нас закончатся доступные соединения, и сервер зависнет.

Функция запроса;

var query = function(query){
  return new Promise(function(resolve, reject){
    con.query(query, function(err, row){
      if(err){
        reject(err);
      }

      resolve(row);
    });
  });
}

Использование функции;

db.query('SELECT * FROM `users` WHERE `isBanned` = 0').then(function(users){
  //active users
}).catch(function(err){
  ...
});

Все соединения, которые накапливаются, находятся в команде Спящий режим

Редактировать: объединить соединения в один пул базы данных

Main.js

var pool = mysql.createPool({
    connectionLimit: 250,
    host: config.mysql.host,
    user: config.mysql.user,
    password: config.mysql.pass,
    database: config.mysql.database,
    charset: 'utf8_general_ci'
});
module.exports.pool = pool;

Database.js (в основном только для функции запроса)

var main = require('./server.js');

var query = function(query){
  return new Promise(function(resolve, reject){
    main.pool.query(query, function(err, row){
      if(err){
        reject(err);
      }

      resolve(row);
    });
  });
}

module.exports = {
  con: main.pool,
  query: query
};
...