Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PostgreSQL中诊断应用程序连接泄漏_Postgresql - Fatal编程技术网

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

在PostgreSQL中诊断应用程序连接泄漏,postgresql,Postgresql,我正在调查PostgreSQL中的连接泄漏,希望收集一些诊断信息 特别是,我希望将一些信息与我建立的每个连接相关联,然后能够直接查询它 如果我在MS-SQL中设计这种类型的东西,我会改变我的连接工厂,在每次连接完成后,对一个诊断表执行一个upsert,其中包含一个、回溯和其他诊断信息 然后,为了诊断发生了什么,我可以在spid上查询连接到我的诊断表。这将为我提供与每个连接关联的干净的应用程序回溯 如何在PostgreSQL上实现类似的功能 PostgreSQL派生一个新进程来处理每个连接。您可以

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

特别是,我希望将一些信息与我建立的每个连接相关联,然后能够直接查询它

如果我在MS-SQL中设计这种类型的东西,我会改变我的连接工厂,在每次连接完成后,对一个诊断表执行一个upsert,其中包含一个、回溯和其他诊断信息

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


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

PostgreSQL派生一个新进程来处理每个连接。您可以轻松获取此过程的PID:

SELECT pg_backend_pid();
这对应于标准管理工具中可见的流程ID(
top
ps
,等等)。您也可以使用标准工具(
kill
)终止连接,或者在具有相应权限的情况下,通过说
SELECT pg\u terminate\u backend(pid)

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

SELECT * FROM pg_stat_activity;
最后一点注意:在运行查询时,PID保证是唯一的,但最终将被操作系统重新使用。通过将PID与
pg\u stat\u activity
backend\u start
列配对,可以确保唯一性。对于这一点,您不妨将其与日志记录结合起来:

INSERT INTO log_table (pid, backend_start, message, backtrace)
SELECT procpid, backend_start, 'my message', 'my backtrace'
FROM pg_stat_activity
WHERE procpid=pg_backend_pid();

PostgreSQL派生一个新进程来处理每个连接。您可以轻松获取此过程的PID:

SELECT pg_backend_pid();
这对应于标准管理工具中可见的流程ID(
top
ps
,等等)。您也可以使用标准工具(
kill
)终止连接,或者在具有相应权限的情况下,通过说
SELECT pg\u terminate\u backend(pid)

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

SELECT * FROM pg_stat_activity;
最后一点注意:在运行查询时,PID保证是唯一的,但最终将被操作系统重新使用。通过将PID与
pg\u stat\u activity
backend\u start
列配对,可以确保唯一性。对于这一点,您不妨将其与日志记录结合起来:

INSERT INTO log_table (pid, backend_start, message, backtrace)
SELECT procpid, backend_start, 'my message', 'my backtrace'
FROM pg_stat_activity
WHERE procpid=pg_backend_pid();