如何确定PostgreSQL中是否有未提交事务的[空闲连接]?


24

根据对这个问题的评论,我询问了PostgreSQL 9.2中的空闲连接,一些未提交的事务(可能与那些空闲连接有关)可能会导致一些性能问题。

有什么好的方法来确定是否存在未提交的事务(如果有办法知道它们所建立的连接是否空闲,则可以获得奖励积分)?

非常感谢!


2
看一看pgtop。您也可以在的输出中寻找显示“交易空闲”的行ps aux
dezso

@dezso- pgtop看起来很有趣;Windows是否有等同功能?
Max Vernon

@MaxVernon有一些提示,它应该可以在Windows上运行,但尚未看到任何具体示例。但这仍然是一个(相对)简单的Perl项目,因此...无论如何,它可以在pg_stat *视图上工作。
dezso 2013年

Answers:


16

如果要查看有多少个具有打开事务的空闲连接,可以使用:

select * 
from pg_stat_activity
where (state = 'idle in transaction')
    and xact_start is not null;

这将提供处于空闲状态的打开连接的列表,这些连接也具有打开的事务。

话虽如此,我无法在具有打开事务的空闲状态下重新创建打开连接。也许其他人可以提供有关如何执行此操作的详细信息。


3
请注意,该state列仅在9.2中存在。对我来说,正确的状态似乎是“交易空闲”。
dezso

1
我同意德佐。
法郎

1
state = 'idle'不能表明一个开放的交易。
a_horse_with_no_name 2014年

2
I cannot recreate an open connection in the idle state that has an open transaction. 打开与数据库的两个连接,然后键入“ begin;”。在一个。在另一个运行上面的查询,您将有一个idle in transaction
X-Istence '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.