在pg_activity中使用“show transaction isolation level”获取多个查询

时间:2013-09-10 08:26:24

标签: transactions postgresql-9.2

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

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

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

2 个答案:

答案 0 :(得分:1)

当您的连接池打开连接

时,可能会调用

SHOW TRANSACTION ISOLATION LEVEL

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

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

例如我的帖子有

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

答案 1 :(得分:0)

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

  1. 首先查看pg_stat_activity中的其他信息。什么是application_name?涉及的IP地址是什么?简而言之,这些查询来自哪里?
  2. 如果你的联系不足,问题就是为什么你会这么多,为什么他们这么做很少。这涉及对客户端软件进行故障排除,而不是对服另外值得一提的是,查询在事务中是处于活动状态,空闲状态还是空闲状态,如果它们只是空闲,为什么在没有限制的情况下它们也没有断开连接。
  3. 话虽如此,我猜这些来自客户端软件用于连接的db框架。而且我的猜测是你更容易发生数据库连接泄漏而不是许多查询做无用的东西。