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 上也不起作用。
还要确保在使用后关闭连接,包括错误例程在内的所有地方。
我正在使用 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 上也不起作用。
还要确保在使用后关闭连接,包括错误例程在内的所有地方。