gpt4 book ai didi

mysql - NodeJs - 如何在我的模型之间共享 MySQL 池以避免 'ER_CON_COUNT_ERROR'

转载 作者:行者123 更新时间:2023-11-29 18:28:56 24 4
gpt4 key购买 nike

我目前正在使用 ApacheBench 测试我的 Node 应用程序。我的数据库遇到了一个问题,即ER_CON_COUNT_ERROR:连接过多

我在 MySQL Node 模块顶部使用了一个简短的库,您可以在下面看到

var mysql = require('mysql');
var config = require('path/to/config');
var message = require('./myMessageLib.js');

var pool = mysql.createPool({
connectionLimit : 100,
host: config.db.mysql.host,
user: config.db.mysql.user,
password: config.db.mysql.password,
database: config.db.mysql.database
});

var query = function(query_str, values, next) {
pool.getConnection((err, connection) => {
if (err) {
console.error("MySQL Fail to get a connection in pool : " + err);
if (typeof connection !== "undefined")
connection.release();
next(error, null);
return ;
}
connection.query(query_str, values, function(error, data, fields) {
connection.release();
if (error)
if (config.app.env.dev)
throw (error);
else {
next(error, null);
return (message.error("MySQL query failed : " + query_str + " / err : " + error));
}
if (data.length == 0)
next(null);
else
next(data);
})
})
}

exports.query = query;

我通过做这样的事情在我的模型中使用这个库

var mysql = require('path/to/mysqllib');

/**
* Class PlayerModel
*/
function PlayerModel() { };

PlayerModel.prototype.get = function(id, next) {
mysql.query("SELECT ....", [id], function(player) {
// stuff
})
}

module.exports = PlayerModel;

这些东西在我的主页上,我使用不同的模型,如上面介绍的模型,每个模型都会启动一个查询来获取一些数据库信息。当我启动只有 50 个并发级别的 ApacheBench 时,我得到了 ER_CON_COUNT_ERROR:连接数太多。所以我感觉这个池制作得不好,因为它似乎没有遵守简短的 MySQL 库中编写的 100 个连接限制。

我正在考虑在 global nodejs 变量中创建和存储池,以便能够在我的模块中正确共享它,但我不确定这是一个好方法,也许我也是在我的池实现中做错了什么。

您有什么想法或改进建议吗?

谢谢 friend !

最佳答案

我发现了这个问题。

我的应用程序正在集群模式下部署。两个进程同时运行。因此,可能会创建两个 100 个连接的池,从而导致总共 200 个连接,高于 MySQL 默认连接限制。

关于mysql - NodeJs - 如何在我的模型之间共享 MySQL 池以避免 'ER_CON_COUNT_ERROR',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45889687/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com