在PostgreSQL中追踪遗弃/空闲连接。

背景信息

我发现我们某些代码中存在一个bug,一个函数连接到postgresql数据库,但在关闭数据库连接之前就“返回”了。

这个问题只有在有一次,我们有了超过MAX_CONNECTIONS值的大量并发连接时才被捕获,我在pg_stat_activity表中找到了一堆“空闲”记录。

问题

只有在我的脚本中循环调用这个函数并创建负载时,我才会看到这些空闲连接...

这意味着,如果我使用不关闭db的错误代码并连接一次,我在pg_stat_activity表中不会看到任何“空闲”记录。请注意,我需要一两秒钟来在运行脚本的窗口和运行psql客户端的窗口之间切换。

所以我的问题在这里。

  1. 跟踪空闲连接的最佳方法是什么?我的方法正确吗?

  2. 在postgresql会话选择我请求的数据并将其返回到客户端后,它会等多久才杀死空闲会话?或者,当我的脚本运行完所有逻辑时,这些空闲记录会被杀掉吗?

我试过使用非常低的TCP保持活动状态值,以防它相关,但我得到了相同的结果。

如果我的问题不够清晰,请让我知道,我会修改。谢谢!

点赞