Database 如何查找数据库连接泄漏(针对PostgreSQL)应用程序
我的环境:Windows XP嵌入式、Atom N280 CPU、4G内存、Postgresql odbc驱动程序 我注意到,我们新开发的本地应用程序运行一段时间后(连接到PostgreSql 9.2数据库),会记录异常: 剩余的连接插槽保留给非复制超级用户连接 我知道这表明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 ========
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谈谈。