Node.js Oracle数据库连接池:如何记录当前已打开的连接数
记录Oracle连接池的实时打开连接数
嘿,作为Node.js+Oracle的新手能把连接池跑起来已经很棒啦!要实现每次查询后记录当前已打开的连接数,其实oracledb的连接池API已经帮我们准备好了对应的方法,下面一步步给你说明:
核心思路
Oracle的Node.js驱动(oracledb)提供了getStats()方法,通过连接池对象调用它就能获取到包含连接状态的统计数据,其中connectionsOpen字段就是你需要的当前已打开的连接总数。
具体实现步骤
- 获取连接池实例:因为你创建池时指定了
poolAlias: 'userpool',所以可以通过oracledb.getPool('userpool')快速拿到对应的连接池对象。 - 在查询完成后获取统计数据:不管查询成功还是失败,都建议在
finally块里执行统计记录,确保不会遗漏。
完整示例代码
假设你有一个执行查询的函数,我们可以这样修改它:
// 先确保你的连接池已经初始化(就是你写的bbUserPool函数) async function executeQuery(sql, binds) { let connection; try { // 从连接池获取连接 connection = await oracledb.getConnection('userpool'); // 执行查询 const result = await connection.execute(sql, binds); return result; } catch (err) { console.error("Query Error:", err.message); throw err; } finally { // 释放连接回池 if (connection) { try { await connection.close(); } catch (err) { console.error("Close Connection Error:", err.message); } } // 记录当前已打开的连接数 try { const pool = oracledb.getPool('userpool'); const poolStats = pool.getStats(); console.log(`当前已打开的连接数: ${poolStats.connectionsOpen}`); // 如果你还想查看其他状态,比如正在使用的连接数、可用连接数,可以一起打印 // console.log(`正在使用的连接数: ${poolStats.connectionsInUse}`); // console.log(`可用连接数: ${poolStats.connectionsAvailable}`); } catch (err) { console.error("获取连接池统计信息失败:", err.message); } } }
补充说明
getStats()返回的统计对象里还有很多有用的字段,比如:connectionsInUse:当前正被应用占用的连接数connectionsAvailable:池里空闲可用的连接数connectionsTotal:池的总连接数(对应你设置的poolMax)
- 如果需要更详细的统计,你可以在创建连接池时设置
statsInterval(单位毫秒),驱动会定期收集更细致的性能数据,但对于你的需求来说,默认的getStats()已经足够用啦。
内容的提问来源于stack exchange,提问作者Juturu Jsr
相关产品推荐
相关产品推荐

