PostgreSQLにコミットされていないトランザクションがある[アイドル接続がある]かどうかを判断する方法は?


24

PostgreSQL 9.2のアイドル接続について尋ねこの質問に対するコメントによると、いくつかのコミットされていないトランザクション(これらのアイドル接続の一部に関連している可能性があります)はパフォーマンスの問題を引き起こす可能性があります。

コミットされていないトランザクションがあるかどうかを判断する良い方法は何ですか(接続している接続がアイドル状態かどうかを知る方法がある場合のボーナスポイント)。

どうもありがとう!


2
をご覧くださいpgtop。また、の出力で「トランザクションのアイドル」を示す行を探すこともできps auxます。
dezso

@dezso- pgtop面白そうです。Windowsに相当するものはありますか?
マックスヴァーノン

@MaxVernonには、Windowsで動作するはずであるが、具体的な例が見当たらないというヒントがいくつかあります。しかし、それはまだ(比較的)単純なPerlプロジェクトなので、...とにかく、pg_stat *ビューで動作します。
-dezso

回答:


16

開いているトランザクションがあるアイドル状態の接続の数を確認する場合は、次を使用できます。

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

これにより、アイドル状態にあるオープン接続のリストが提供され、オープン接続もあります。

そうは言っても、開いているトランザクションがあるアイドル状態で開いている接続を再作成することはできません。おそらく他の誰かがそれを行う方法の詳細を提供できるでしょう。


3
このstate列は9.2にのみ存在することに注意してください。そして、私にとっては、適切な状態は「アイドル状態」です。
dezso

1
dezsoに同意します。
フラン

1
state = 'idle'開いているトランザクションを示すものではありませ
a_horse_with_no_name 14

2
I cannot recreate an open connection in the idle state that has an open transaction. データベースへの2つの接続を開き、「begin;」と入力します。ひとつに。もう一方では、上記のクエリを実行すると、ができますidle in transaction
X-Istence
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.