【问题标题】:Postgres sessions are idle with query = COMMIT or ROLLBACKPostgres 会话处于空闲状态,查询 = COMMIT 或 ROLLBACK
【发布时间】:2017-10-31 17:19:56
【问题描述】:

我有一个用于基于 Web 的 Java 应用程序的 Postgres 9.5 数据库。有时,由于长时间运行的查询,会话数突然激增,并且这些会话不会立即清除。当我检查 pg_stat_activity 时,查询列显示 COMMIT 或 ROLLBACK 处于空闲阶段。这导致 Postgres 达到 max_connections 的高阈值,这可能会导致生产中断。

查询 |回滚 状态 |闲置的 计数 | 167

查询 |犯罪 状态 |闲置的 计数 | 280

  1. 这些 COMMIT/ROLLBACK 空闲会话是什么?
  2. 如何让这些空闲会话立即清除?
  3. 如何减少创建这些空闲会话的数量?

谢谢

【问题讨论】:

标签: postgresql session


【解决方案1】:

这些是等待另一个查询的连接。他们什么也没做。这就是他们闲置的原因。

您的应用使用连接池来避免一直断开连接并重新连接。当它的连接数多于活动查询时,一些会处于空闲状态,显示的查询将是最后一个完成的查询。

这完全正常,无需担心。您无需更改或修复任何内容。

【讨论】:

  • 感谢@Craig Ringer。我怎样才能准确地找到这些新会话正在运行的内容? pg_stat_activity.query 不提供该信息。我可以检查其他选项吗?
  • @Murali 它只保留最近的查询。您需要使用log_statement = 'all' 并添加一个log_statement_prefix,包括会话ID 或xid,这样您就可以重新组装整个事务的活动。
  • 是的,但是这些空闲的事务会在数据库上创建锁,阻止其他用户编辑数据库中的其他表。有没有办法在一定的不活动时间后自动终止这些空闲事务?
猜你喜欢
  • 2015-06-22
  • 1970-01-01
  • 2020-05-20
  • 2012-02-17
  • 2016-07-20
  • 2018-10-01
  • 2012-11-29
  • 2015-01-19
  • 1970-01-01
相关资源
最近更新 更多