我有大约20个使用以下配置访问我的数据库的node.js文件:
var pool = mysql.createPool({
host: databaseHost,
user: databaseUser,
password: databasePassword,
database: databaseName,
multipleStatements: true
});
这些功能都使用以下模式:
pool.getConnection(function (err, connection) {
if (err) {
callback(err);
} else {
// Use the connection
var sql = "...sql statement...";
var inserts = [...inserts...];
connection.query(sql, inserts, function (error, results, fields) {
// And done with the connection.
connection.release();
// Handle error after the release.
if (error) {
callback(error);
} else {
callback(null, results);
}
});
}
});
我最近开始收到错误:
"ER_CON_COUNT_ERROR: Too many connections"
调用我的任何函数。我不太了解池概念。如果每个函数都在创建一个池,那么每次调用该函数时都会创建一个单独的池吗?
我理解获得连接和释放连接。只是不要真正得到createPool。
我尝试记录以下内容:
console.log(pool.config.connectionLimit); // passed in max size of the pool
console.log(pool._freeConnections.length); // number of free connections awaiting use
console.log(pool._allConnections.length); // number of connections currently created, including ones in use
console.log(pool._acquiringConnections.length); // number of connections in the process of being acquired
结果是:
10
0
0
0
我可以增加连接数,但希望能更好地理解问题存在的原因。
答案 0 :(得分:1)
如果你的createPool在函数内部每次都需要查询,那么是的,它是严重的!相反,只有一个不同的文件用于mysql连接。编写一个在函数内部创建池的类,然后在构造函数中,您只需从池中返回连接即可。这样,如果您只需要在项目中的任何位置使用此文件,并创建该类的对象,则可以使用它来查询和释放!