【问题标题】:How to manage connection pool with Knex/generic-pool and Oracle如何使用 Knex/generic-pool 和 Oracle 管理连接池
【发布时间】:2018-05-24 21:32:22
【问题描述】:

我们使用带有通用池的 Knex 作为 Oracle 11.2 数据库的查询构建器和池管理器。

我们面临的问题是,有一段时间Knex / generic-pool 开始积累连接,无法回收。

我尝试将一些参数传递给 Knex / Generic Pool 以使它们在某个时间点后终止连接,但看起来它没有成功。

包版本:

  • Knex:v0.13.0
  • Oracledb:v1.13.1
  • 通用池:v2.5.4

Knex 配置:

{
    client: 'oracledb',
    connection: {
        user: DB_USER,
        password: DB_PASSWORD,
        host: `${DB_HOST}:${DB_PORT}`,
        database: DB_NAME
    },
    debug: true,
    fetchAsString: ['number', 'clob'],
    acquireConnectionTimeout: 843600000,
    pool: {
        min: 2,
        max: 150,
        acquireTimeoutMillis: 100000,
        evictionRunIntervalMillis: 120000,
        maxWaitingClients: 100,
        idleTimeoutMillis: 100000
    }
}

Openshift print with environment variable DEBUG="Knex:*" showing a lot of clients waiting for connection

【问题讨论】:

  • 通用池可能有一些不错的功能,但您会失去使用 12.2 客户端(可用于连接到 11.2 DB)的轻量级 node-oracledb 连接池 ping 以及还有所有的东西,比如 FAN 和 AC。

标签: node.js oracle knex.js


【解决方案1】:

尝试 knex 0.14.2 修复了一些与池相关的问题。还尝试在创建/提交/回滚事务时添加一些调试信息。打开的交易将从池中获取连接并由机器人释放它,直到交易结束。您可以通过设置 DEBUG=knex:* 环境变量获取有关运行应用程序的池和事务的信息。

【讨论】:

  • Thks,我从今天开始在我们的认证环境中使用 Knex 0.14.2 进行测试。当我有更多数据要分享时会回复。
  • 尝试使用 Knex 0.14.2 但这没有帮助。显然,池管理器在一段时间后无法回收连接。
  • 添加更新:我们现在使用 oracledb 3.0,带有运行状况检查以清除连接,以防应用程序无响应。现在效果更好了。
猜你喜欢
  • 2015-06-15
  • 1970-01-01
  • 2012-09-30
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多