PostgreSQL에 커밋되지 않은 트랜잭션과의 유휴 연결이 있는지 확인하는 방법은 무엇입니까?


24

이 질문 에 대한 의견에 따르면 PostgreSQL 9.2의 유휴 연결에 대해 물었습니다. 커밋되지 않은 일부 트랜잭션 (유휴 연결 중 일부와 관련이 있음)이 일부 성능 문제를 일으킬 수 있습니다.

커밋되지 않은 트랜잭션이 있는지 확인하는 좋은 방법은 무엇입니까 (연결중인 연결이 유휴 상태인지 알 수있는 방법이있는 경우 보너스 포인트)?

매우 감사합니다!


2
를보십시오 pgtop. 의 출력에서 ​​"idle in transaction"을 표시하는 행을 찾을 수도 있습니다 ps aux.
dezso

@dezso- pgtop재미있어 보인다. Windows에 해당하는 것이 있습니까?
Max Vernon

@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에 동의합니다.
francs

1
state = 'idle'열린 거래를 나타내지 않습니다 .
a_horse_with_no_name

2
I cannot recreate an open connection in the idle state that has an open transaction. 데이터베이스에 대한 두 개의 연결을 열고 "begin;"을 입력하십시오. 하나의. 다른 경우 위의 쿼리를 실행하면 idle in transaction.
X- 이스턴 스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.