将释放一个MySQL连接之前将返回允许通过垃圾收集释放所述连接?

我的问题涉及从节点内发布的mysql连接。

如果我在连接被释放之前返回,那么连接仍然会被持有,还是垃圾回收会对我进行处理?

我问的原因是,我曾经有一个问题,后来的连接被拒绝了,因为我已经使用了整个连接池而没有释放它们。

这个问题似乎没有发生,所以我只是想尽可能澄清。

提前致谢。

格兰特。

sql.getConnection(function (err, connection) { if (err) { res.send(4xx,"error"); return; } if (req.body.premium) { //try premium first //code snipped return; } //code snipped connection.release(); }); 

数据库连接甚至不可能在JavaScript中被垃圾收集,因为这需要相当低的JS引擎集成度。

除此之外,只要您传递给.getConnection()callback.getConnection()尚未被调用,代码中创build的闭包仍然存在,并且即使已经从原始数据库返回,闭包中的variables也不会被垃圾收集函数调用。 当使用asynchronous操作时,这是javascript的一个重要特性,被广泛用于asynchronous编程。


看起来你有多个不会释放连接的代码path,因为你在调用connection.release();之前有两个return语句connection.release(); 所以这两个path在我看来就像通过你的代码的方式,你不会正确地释放连接(这与垃圾收集无关)。

如果您无法释放连接,则无法在池中使用该连接,并且不能被其他呼叫者使用,并且可能会用尽连接池。

垃圾收集不会为你解决这个问题。 你将必须确保所有代码path在你完成之后释放连接。 否则,你会“泄漏”连接,你的连接池将会失去连接。

调用release()不会破坏连接,只会将连接标记为“可用”,以供其他请求使用。 所以如果你不release()连接,就连接池而言,它仍然看起来是“繁忙的”,意味着其他请求不能使用它。