Jak ustalić, czy w PostgreSQL istnieją [bezczynne połączenia z] niezatwierdzonymi transakcjami?


24

Zgodnie z komentarzem do tego pytania, które zadałem na temat bezczynnych połączeń w PostgreSQL 9.2 , niektóre niezaangażowane transakcje (prawdopodobnie związane z niektórymi z tych bezczynnych połączeń) mogą powodować pewne problemy z wydajnością.

Jaki jest dobry sposób na ustalenie, czy są niezatwierdzone transakcje (punkty bonusowe, jeśli istnieje sposób, aby sprawdzić, czy połączenie, na którym się znajdują, jest bezczynne)?

Dziękuję bardzo!


2
Spójrz na pgtop. Możesz także wyszukać wiersze z informacją o „bezczynności w transakcji” na wyjściu ps aux.
dezso

@dezso - pgtopwygląda interesująco; czy istnieje odpowiednik dla systemu Windows?
Max Vernon

@ MaxVernon jest kilka wskazówek, że ma działać w systemie Windows, ale nie widział żadnego konkretnego przykładu. Ale wciąż jest to (stosunkowo) prosty projekt Perla, więc ... W każdym razie działa na widokach pg_stat *.
dezso

Odpowiedzi:


16

Jeśli chcesz zobaczyć, ile masz wolnych połączeń, które mają otwartą transakcję, możesz użyć:

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

Spowoduje to wyświetlenie listy otwartych połączeń będących w stanie bezczynności, które również mają otwartą transakcję.

Powiedziawszy to, nie mogę odtworzyć otwartego połączenia w stanie bezczynności z otwartą transakcją. Być może ktoś inny może podać szczegółowe informacje, jak to zrobić.


3
Uwaga: statekolumna jest obecna tylko w wersji 9.2. I dla mnie wygląda na to, że właściwym stanem jest „bezczynność w transakcji”.
dezso

1
Zgadzam się z dezso.
franków

1
state = 'idle'ma nie oznaczać otwartą transakcję.
a_horse_w_no_name

2
I cannot recreate an open connection in the idle state that has an open transaction. Otwórz dwa połączenia z bazą danych i wpisz „begin;” w jednym. W drugim uruchom powyższe zapytanie, a będziesz mieć idle in transaction.
X-Istence
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.