gpt4 book ai didi

mysql - 池不断增加连接并以 ER_CON_COUNT_ERROR 结束

转载 作者:太空宇宙 更新时间:2023-11-03 12:14:45 25 4
gpt4 key购买 nike

我有一个名为 Connection 的类,如下所示。这只执行选择语句。我有用于插入或更新的非池化连接。

var _mysql = require('mysql');

function Connection()
{
//private variables and dependencies includes

//create mysql pool connection requires nodejs mysql this connection is used only for selects.
var _connectionSelect = _mysql.createPool({
host : _config.mySQLDB.select.dbHost,
user : _config.mySQLDB.select.dbUser,
password : _config.mySQLDB.select.dbPass,
database : _config.mySQLDB.select.dbName,
supportBigNumbers : true,
connectTimeout : 7000,
connectionLimit : 5,
queueLimit : 5
});
this.executeSelect = function(sql, callback, Message)
{
//connects to mysql.
_connectionSelect.getConnection(function(connectionError, Connection){
if(connectionError)
{
console.log(connectionError);
//throws error if connection or sql gone wrong
Message.add("error", 'serviceDown');
Message.add("devError", 'unknownError');
callback(false);
}
else
{
//executes the query passed
Connection.query(sql, function(error, rows) {
Message.incerementQuery();
if(error)
{
Connection.release();
console.log(error+sql);
//throws error if connection or sql gone wrong
Message.add("error", 'unknownError');
Message.add("devError", "seriousError", "Database errors at resource server side");
callback(false);
}
else
{
Connection.release();
//executes the callback function
callback(rows);
}
});
}
});
};
}

exports.Connection = Connection;

每当我想执行查询时,我都会创建此类的一个实例。

我知道 MySQL 中的默认并发连接数是 100,我想保留这个数字。

每当我尝试运行我的应用程序时,此连接池都会增加每个选择并很快达到 100 个连接。

如您所见,我会在成功或错误状态时释放连接。我很确定我一定做错了什么,但很难弄清楚。

是因为我如何创建此类的实例吗?我希望如果我供应

connectionLimit : 5

即使我创建了这个类的许多实例,它也应该只使用 5 个连接?

注意:我的本地机器上只有这个应用程序的一个实例。

抱歉我太业余了,我是这个流式 I/O 业务的新手。我喜欢池的想法,但如果我不能解决这个问题,我可能需要为每个查询使用传统的打开和关闭连接。任何帮助将不胜感激。

非常感谢,

卡尔提克

最佳答案

从 git hub https://github.com/dougwilson 得到 Doug Wilson 的答案.

我应该在函数之外实例化 createPool。就像一个魅力。

代码如下

    var _mysql = require('mysql');
//create mysql pool connection requires nodejs mysql this connection is used only for selects.
var _connectionSelect = _mysql.createPool({
host : _config.mySQLDB.select.dbHost,
user : _config.mySQLDB.select.dbUser,
password : _config.mySQLDB.select.dbPass,
database : _config.mySQLDB.select.dbName,
supportBigNumbers : true,
connectTimeout : 7000,
connectionLimit : 5,
queueLimit : 5
}


function Connection()
{
//private variables and dependencies includes

);
this.executeSelect = function(sql, callback, Message)
{
//connects to mysql.
_connectionSelect.getConnection(function(connectionError, Connection){
if(connectionError)
{
console.log(connectionError);
//throws error if connection or sql gone wrong
Message.add("error", 'serviceDown');
Message.add("devError", 'unknownError');
callback(false);
}
else
{
//executes the query passed
Connection.query(sql, function(error, rows) {
Message.incerementQuery();
if(error)
{
Connection.release();
console.log(error+sql);
//throws error if connection or sql gone wrong
Message.add("error", 'unknownError');
Message.add("devError", "seriousError", "Database errors at resource server side");
callback(false);
}
else
{
Connection.release();
//executes the callback function
callback(rows);
}
});
}
});
};
}

exports.Connection = Connection;

非常感谢。抱歉我这么蠢。

卡尔提克

关于mysql - 池不断增加连接并以 ER_CON_COUNT_ERROR 结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22696070/

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