Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.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
Database 如何查找数据库连接泄漏(针对PostgreSQL)应用程序_Database_Postgresql - Fatal编程技术网

Database 如何查找数据库连接泄漏(针对PostgreSQL)应用程序

Database 如何查找数据库连接泄漏(针对PostgreSQL)应用程序,database,postgresql,Database,Postgresql,我的环境:Windows XP嵌入式、Atom N280 CPU、4G内存、Postgresql odbc驱动程序 我注意到,我们新开发的本地应用程序运行一段时间后(连接到PostgreSql 9.2数据库),会记录异常: 剩余的连接插槽保留给非复制超级用户连接 我知道这表明db连接泄漏,这是由打开db连接引起的,但没有正确关闭 同时,我可以看到系统中postgres.exe的进程不断增加,最终达到了百余个,postgreSQL配置中的max\u connections是150 ========

我的环境:Windows XP嵌入式、Atom N280 CPU、4G内存、Postgresql odbc驱动程序

我注意到,我们新开发的本地应用程序运行一段时间后(连接到PostgreSql 9.2数据库),会记录异常:

剩余的连接插槽保留给非复制超级用户连接

我知道这表明
db连接泄漏
,这是由打开db连接引起的,但没有正确关闭

同时,我可以看到系统中
postgres.exe
的进程不断增加,最终达到了百余个,postgreSQL配置中的
max\u connections
150

===================================

我试图将这些
postgres.exe
链接到我的应用程序,但由于该进程是在ODBC驱动程序中创建的,因此无法获得任何线索。我还启用了“ODBC连接池”的windows性能计数器,但它只有总体统计数据


因此,有人建议如何在不检查每个应用程序代码的情况下将db open连接链接到我的应用程序吗?

(0)
检查日志文件(可能首先降低max_connections;-)
(1)
杀死一些连接,看看会有什么影响。(如果有问题;应用程序可能再也看不到泄漏的连接)@joop(0)检查应用程序日志可能没有帮助,因为所有使用
连接之类的日志记录的应用程序都已用完,其中一些可能只是受害者。(1) 你的意思是我随机杀死postgres.exe,然后检查每个应用程序的日志是否有异常?但是,通过使用一个,被杀死的一个可能是正常的,或者它只是位于连接池中。1)不是应用程序日志,而是服务器的postgres日志。2) 不,我是指服务器端的
pg\u terminate\u后端(pid)
。顺便说一句:配置后,您可以从pgadmin前端查看服务器日志。@joop感谢您的回复,0)我已经检查了数据库端日志(但日志现在不在我手中),它记录了一些类似
的内容,所有连接都用完了,除了一些留给管理员角色连接的连接之外,似乎对我没有帮助。1) 不太清楚您的目的,我终止一个连接,然后检查应用程序日志,如果它同时记录了一些错误,那么这个连接属于这个应用程序?我希望它属于您的应用程序;-]您可以更改日志记录,以便将{ip address+portnum+connectionid+username+databasename}添加到日志行中。这将使您能够检测应用程序的连接。请与DBA交谈。
(0)
检查日志文件(可能首先降低max_connections;-)
(1)
关闭一些连接,并查看其影响。(如果有问题;应用程序可能再也看不到泄漏的连接)@joop(0)检查应用程序日志可能没有帮助,因为所有使用
连接之类的日志记录的应用程序都已用完,其中一些可能只是受害者。(1) 你的意思是我随机杀死postgres.exe,然后检查每个应用程序的日志是否有异常?但是,通过使用一个,被杀死的一个可能是正常的,或者它只是位于连接池中。1)不是应用程序日志,而是服务器的postgres日志。2) 不,我是指服务器端的
pg\u terminate\u后端(pid)
。顺便说一句:配置后,您可以从pgadmin前端查看服务器日志。@joop感谢您的回复,0)我已经检查了数据库端日志(但日志现在不在我手中),它记录了一些类似
的内容,所有连接都用完了,除了一些留给管理员角色连接的连接之外,似乎对我没有帮助。1) 不太清楚您的目的,我终止一个连接,然后检查应用程序日志,如果它同时记录了一些错误,那么这个连接属于这个应用程序?我希望它属于您的应用程序;-]您可以更改日志记录,以便将{ip address+portnum+connectionid+username+databasename}添加到日志行中。这将使您能够检测应用程序的连接。请和DBA谈谈。