诊断PostgreSQL中的应用程序连接泄漏

时间:2012-10-04 18:21:57

标签: postgresql

我正在调查PostgreSQL中的连接泄漏,并希望收集一些诊断信息。

特别是,我想将一些信息与我所建立的每个连接相关联,然后才能直接查询。

如果我在MS-SQL中设计这种东西,我会改变连接工厂,在每次建立连接后对诊断表执行upsert,包含@@spid,回溯和其他诊断信息。< / p>

然后,为了诊断发生了什么,我可以在spid上查询sysprocesses加入我的诊断表。这将为我提供与每个连接相关联的干净的应用程序回溯。

如何在PostgreSQL上实现类似的功能?

1 个答案:

答案 0 :(得分:4)

PostgreSQL分支处理每个连接的新进程。您可以轻松获得此过程的PID:

SELECT pg_backend_pid();

这对应于标准管理工具(topps等)中可见的流程ID。您也可以使用标准工具终止连接(kill),或者使用适当的权限通过说SELECT pg_terminate_backend(pid)来终止连接。

数据库中也可以访问当前会话列表:

SELECT * FROM pg_stat_activity;

最后一点:PID在运行查询时保证是唯一的,但最终会被操作系统重用。您可以通过将PID与backend_start的{​​{1}}列配对来确保唯一性。就此而言,您可能会将其与日志记录混为一谈:

pg_stat_activity