根据Chaining-Queries的说法,pg-promise维基任务是在单个共享连接中进行多个查询的首选方式。
虽然我知道使用Task进行单个查询是没有意义的,但我使用single query进行测试只是为了看看它在日志中的表现。不知何故,我对所获得的结果感到惊讶
无任务:
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个已分配的连接。一个用于main (?)线程和任务本身的第二个。
正确地增加了useCount,这意味着从池中重用了连接。但主要的事情仍然是-每个任务处理从连接池中分配2个连接。
它是预期的行为还是我错过了smth?
发布于 2018-06-28 21:45:34
由于大小的原因,我不能把这个作为对@vitaly-t评论的回应。
为了使子查询重用父会话上下文,请确保调用任务方法中提供的上下文对象t
return this.db.task(t => {
return t.any('select now()').then(
() => t.any('select now()').then(
() => '2 queries are executed'
)
)
})我们就会得到
13:30:26 connect(user@db); useCount: 0
13:30:26 task/start
13:30:26 task: select now()
13:30:26 task: select now()
13:30:26 task/end; duration: .005, success: true
13:30:26 disconnect(user@db)https://stackoverflow.com/questions/51060043
复制相似问题