【发布时间】:2019-01-19 05:38:49
【问题描述】:
根据Chaining-Queries pg-promise wiki Task 是在单个共享连接中进行多个查询的首选方式。
虽然我知道将 Task 用于单个查询是没有意义的,但我使用单个查询进行测试只是为了查看它在日志中的显示方式。获得的结果不知何故让我感到惊讶
没有任务:
07:14:02 connect(user@db); useCount: 0
07:14:02 SELECT * FROM t
07:14:02 disconnect(user@db)
有任务:
07:15:27 connect(user@db); useCount: 0
07:15:27 task/start
07:15:27 connect(user@db); useCount: 0
07:15:27 SELECT * FROM t
07:15:27 disconnect(user@db)
07:15:27 task/end; duration: .009, success: true
07:15:27 disconnect(user@db)
useCount: 0 表示新的物理分配连接
连续进行多个此类查询会重复该模式。每个任务包装查询显示 2 个分配的连接。一个用于主(?)线程,第二个用于任务本身。
useCount 正确增加,这意味着从池中重用连接。但主要的事情仍然存在 - 每个任务处理从连接池中分配 2 个连接。
这是预期的行为还是我错过了什么?
【问题讨论】:
-
您需要显示创建此日志的代码。看起来您在任务内部强制创建新连接,很可能是因为您没有使用任务提供的连接上下文。
-
@vitaly-t 你是对的。在简单的情况下,所有工作都在单个连接中在我的情况下,回调方法被粘贴为参数。在其中还有另一个包装器,它动态选择相应的实体存储库(又名 pg-promise-demo)。在这种模式下,ctx 丢失了,子查询正在从池中分配新的连接
标签: node.js pg-promise