Node.js Nodejs Knex-oracle并发调用-表已锁定

Node.js Nodejs Knex-oracle并发调用-表已锁定,node.js,oracle,knex.js,Node.js,Oracle,Knex.js,我使用Knex npm作为我的查询生成器。版本0.20.11。 节点版本为12.16.1 池大小 最小-3 最大值-500 我的服务是做一些长时间运行的过程,做插入和更新2个以上的表,最后提交事务 我会同时拨打150到200个以上的电话为我服务。 表已锁定。服务已挂起。表锁定后,甚至无法提供一个线程 我正在使用knex.transaction,我在服务结束后提交并销毁了连接 如果有人遇到这种问题,请建议我如何解决 注意:在最小线程数下工作正常如果增加了连接池大小,则增加UV\u THREADPO

我使用Knex npm作为我的查询生成器。版本0.20.11。 节点版本为12.16.1

池大小

最小-3 最大值-500

我的服务是做一些长时间运行的过程,做插入和更新2个以上的表,最后提交事务

我会同时拨打150到200个以上的电话为我服务。 表已锁定。服务已挂起。表锁定后,甚至无法提供一个线程

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

如果有人遇到这种问题,请建议我如何解决


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

如果增加了连接池大小,则增加
UV\u THREADPOOL\u大小
,请参阅节点oracledb文档。如图所示,请确保在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上也不起作用


另外,请确保在使用后关闭所有位置的连接,包括错误例程。

谢谢您的回答。但是我也有同样的错误。最大UV_线程池大小值是多少。在knex npm oracle方言中,有代码自动增加UV_线程池大小。使用jmeter,我给我们的一个api提供了100个并发线程,该api将在表中插入一条记录。在oracle中创建了100个会话(4个活动会话和96个非活动会话)。但什么也没发生。线程正在等待。我仍然不知道如何克服这种情况。我会怀疑代码中的任何设置。除非在线程池启动之前设置了
UV\u THREADPOOL\u SIZE
,否则仍将使用默认大小4。这意味着它确实需要成为代码库中的第一件事。在Windows上运行时,Node.js应用程序中的
process.env.UV\u THREADPOOL\u SIZE设置也将被忽略。事实上,你看到了4个活跃的会议是一个非常有力的线索。因此,请尝试在启动应用程序之前设置环境变量,例如在package.json中。请参阅我针对Knex记录的节点oracledb文档: