You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js Oracle数据库连接池:如何记录当前已打开的连接数

记录Oracle连接池的实时打开连接数

嘿,作为Node.js+Oracle的新手能把连接池跑起来已经很棒啦!要实现每次查询后记录当前已打开的连接数,其实oracledb的连接池API已经帮我们准备好了对应的方法,下面一步步给你说明:

核心思路

Oracle的Node.js驱动(oracledb)提供了getStats()方法,通过连接池对象调用它就能获取到包含连接状态的统计数据,其中connectionsOpen字段就是你需要的当前已打开的连接总数。

具体实现步骤

  1. 获取连接池实例:因为你创建池时指定了poolAlias: 'userpool',所以可以通过oracledb.getPool('userpool')快速拿到对应的连接池对象。
  2. 在查询完成后获取统计数据:不管查询成功还是失败,都建议在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 14:07:49