9

我正在使用 postgres 数据库服务器进行生产。

当我select * from pg_stat_activity在我的 postgresql 服务器上发起查询时,我得到了 98% 的查询,"SHOW TRANSACTION ISOLATION LEVEL"而我的 postgresql 服务器只接受 100 个连接。我的服务器卡住了。所以我无法继续进行。

任何人都知道为什么会发生这种情况,是否有任何想法阻止所有查询。或者为什么这个查询会创建这么多的连接?

4

2 回答 2

1

SHOW TRANSACTION ISOLATION LEVEL当您的连接池打开连接时可能会调用

您是否尝试过减小连接池大小,尝试将其设置为1并查看,您可能会更好地了解正在发生的事情。

我今天刚遇到一个类似的问题,这就是我找到这篇文章的方式,我发现max connection reached只发生在我的测试环境中,原因是我的测试框架(ScalaTest)似乎在 ORM 中为每个测试用例实例化了数据库对象。

例如我的 postgres 有

  • max_connections = 100
  • connection pool = 100

应该没问题,如果只有1个应用程序连接到数据库,但是在测试中,连接池实例化的数量与我的测试用例一样多,因此很容易达到最大值。

于 2016-05-01T13:38:43.907 回答
0

在您的描述中甚至没有足够的信息来开始解决此问题,因此以下是一般故障排除建议。

  1. 首先查看 pg_stat_activity 中的其他信息。application_name 是什么?涉及的IP地址是什么?简而言之,这些查询来自哪里?
  2. 如果你缺乏人脉,问题是为什么你会得到这么多,为什么他们做的工作这么少。这涉及对客户端软件而不是服务器本身进行故障排除。另外值得一问的是查询在事务中是活动的、空闲的还是空闲的,如果它们只是空闲的,如果这是一个限制,为什么它们没有断开连接。

话虽如此,我的猜测是这些来自客户端软件用于连接的数据库框架。而且我的猜测是,您更可能有数据库连接泄漏,而不是许多查询做无用的事情。

于 2015-10-26T16:05:15.300 回答