【问题标题】:Kill all sleeping mysql pool connections using node使用节点杀死所有休眠的 mysql 池连接
【发布时间】:2020-06-24 03:10:49
【问题描述】:

我在我的项目中使用节点并使用连接池,每当我查询 show processlist 时,我发现有超过 200 个睡眠连接,即使我在每次这样的查询后都会释放它-

    return new Promise((resolve, reject) => {

    sql.getConnection(function (err, conn) {
        if (err) {
            conn.release();
            reject(err)
        }
        conn.query('QUERY', function (err, rows) {
            conn.release();
            if (err) {
                reject(err)
            }
            else {
                resolve(rows[0])
            }
        })
    })
})

我仍然发现了 200 多个睡眠连接。有没有办法通过节点杀死无用的睡眠连接?还是有这么多睡眠连接没问题?

提前致谢!

【问题讨论】:

    标签: javascript mysql node.js database connection-pooling


    【解决方案1】:

    如果您使用连接池,则在使用完它们后需要close all the connections in the pool。否则,连接将保持打开状态,直到它们被 MySQL 服务器关闭。

    pool.end(function (err) {
      // all connections in the pool have ended
    });
    

    This GitHub issue 详细解释了释放连接 (conn.release()) 和关闭底层连接池 (pool.end()) 之间的细微差别。

    【讨论】:

    • 但是我不能关闭我的池连接,因为如果我这样做了,什么都不会工作,因为它是一个实时服务器
    • 您希望至少在应用程序在任何情况下结束时结束池。否则,在您停止服务器后,所有这些连接都保持打开状态。另外,您的游泳池connectionLimit 设置在什么位置?
    • 目前我没有设置任何限制
    • 您是否经常启动和停止您的节点服务器?每次你这样做时,它都会打开所有的连接。
    • 是的,我确实经常开始停止
    猜你喜欢
    • 2022-01-25
    • 1970-01-01
    • 2016-07-15
    • 2011-01-05
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多