Nodejs Knex -oracle 并发调用 - table 被锁定

Nodejs Knex -oracle concurrent call - table is locked

我正在使用 Knex npm 作为我的查询构建器。版本 0.20.11。 节点版本为 12.16.1

池大小

分-3 最大值 -500

我的服务是做一些很长的 运行 过程,插入和更新超过 2 tables 最后提交事务。

我给并发调用150多到200,给我服务。 table 是 locked.service 是 hanged.Not 在 table 被锁定后甚至可以提供一个线程。

我正在使用 knex.transaction,我在服务结束后提交并销毁了我的连接。

如果有人遇到此类问题,请告诉我如何解决这个问题。

注意:在最小线程数下工作正常

如果您增加了连接池大小,请增加 UV_THREADPOOL_SIZE,请参阅 node-oracledb 文档 Connections, Threads, and Parallelism。如图所示,确保在 Node.js 线程池启动之前设置此项。在 Windows 上,它必须在 Node.js 本身被执行之前设置。所以最好的方法是将该值设置为环境变量。例如,在 Linux 上,您的 package.json 可能有这样的脚本:

"scripts": {
    "start": "export UV_THREADPOOL_SIZE=10 && node index.js"
  },
. . .

或者,在 Windows 上:

"scripts": {
    "start": "SET UV_THREADPOOL_SIZE=10 && node index.js"
  },
. . .

Knex 当前尝试在内部设置该值:这似乎为时已晚,而且在 Windows 上也不起作用。

还要确保在使用后关闭连接,包括错误例程在内的所有地方。