gpt4 book ai didi

mysql - 节点MySQL上的连接过多

转载 作者:行者123 更新时间:2023-12-03 16:15:39 25 4
gpt4 key购买 nike

使用INSERT IGNORE INTO循环中有很多项目时出现错误Too many connections

function insertCases(cases) {
for(var i in cases) {
var thequery = 'INSERT IGNORE INTO `cases` SET keysused='+cases.keysused+'
pool.query(thequery, function(ee, rr) {
if(ee) {
logger.info(ee);
throw ee;
}
});
}
}

如果现在有100多个案例,那么INSERT IGNORE INTO的数量是我获得太多连接的100倍。我不知道它到底崩溃了多少,但有100个它在工作。

我读到的是,该查询运行该查询,并在完成后也关闭连接,所以我读到,然后我不需要关闭它。

如果我运行100次,等待很短的时间,然后再次运行100次,依此类推,则不会出现太多连接错误。

只有在一次运行这么多时间的情况下。

那是我的数据库设置
var db_config = {
connectionLimit : 5000,
host: 'localhost',
user: 'userexample',
password: '*******',
database: 'example.com'
};

这就是createPool的功能。
function database_connection() {
pool = mysql.createPool(db_config);
pool.getConnection(function(err, connection) {
if(err) {
logger.error('[ERROR] Connecting to database "' + err.toString() + '"');
setTimeout(function() { database_connection(); }, 2500);
}
else
{
pool.query('SET NAMES utf8');
pool.query('SET CHARACTER SET utf8');
logger.trace('[INFO] Connected to database and set utf8!');
}
});

}

节点上的所有查询都只需使用 pool.query运行

在节点开始时调用 database_connection()

最佳答案

您已将connectionLimit设置为五千!这意味着,node-mysql子系统将继续尝试通过添加新连接来处理多个查询请求,直到它拥有五千个为止。您的MySQL服务器的连接限制似乎为100,因此达到该限制时,您的nodejs应用就会崩溃。

设置connectionLimit: 10,
然后,您将使用十个池连接,当它们全部使用时,您的pool.query调用将等到一个可用。

为什么不将限制设置为100?两个原因:

  • 您想为其他客户端软件保留一些MySQL连接。
  • 如果并行并行处理许多类似的查询(在您的情况下为INSERT查询),则它将花费时间来避免争用。使用更少的并行连接,每个查询将更快地完成。
  • 关于mysql - 节点MySQL上的连接过多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54218235/

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