我使用Postgresql for DB并有连接问题。该项目非常大,内部流程很多,而且非常复杂...有时,该应用程序创建了很多连接,并且数据库中没有剩余连接,应用程序冻结了。问题不在数据库中,而是在应用程序中。
[当我查看pg_stat_activity
时,我看到了所有连接,而它们的查询是select 1
(当连接打开时发生的第一个查询,以验证连接)。因此,该应用似乎打开了一个连接,并且没有使用它。而当有很多...您知道...
我不知道从哪里打开代码。
是否有Java / postgres的技术/工具来知道它们来自何处?
仅查看代码将永远花费。
PostgreSQL中没有直接在应用程序源中找到内容的功能。
[您只能尝试使用正确的log_line_prefix
和log_statement
参数在PostgreSQL端启用更详细的日志记录:仅当语句是从特定的可执行文件或主机提交的,这才有帮助(因为相关的日志记录数据可以帮助查找正确的代码部分)。
如果应用程序启动的事务闲置时间过长,则可以设置idle_in_transaction_session_timeout
。
不幸的是,对于没有运行事务的空闲会话,PostgreSQL没有超时。