Co to znaczy, że proces PostgreSQL jest „bezczynny w transakcji”?

87

Co to znaczy, że proces PostgreSQL jest „bezczynny w transakcji”?

Na serwerze, na który patrzę, w wyniku polecenia „ps ax | grep postgres” widzę 9 procesów PostgreSQL, które wyglądają następująco:

postgres: user db 127.0.0.1(55658) idle in transaction

Czy to oznacza, że ​​niektóre procesy są zawieszone, czekając na zatwierdzenie transakcji? Wszelkie wskazówki dotyczące odpowiedniej dokumentacji są mile widziane.

Tylko czytać
źródło

Odpowiedzi:

56

Podręcznik PostgreSQL wskazuje, że oznacza to, że transakcja jest otwarta (wewnątrz BEGIN) i bezczynna. Najprawdopodobniej jest to użytkownik podłączony za pomocą monitora, który myśli lub pisze. Mam ich też dużo w swoim systemie.

Jeśli jednak używasz Slony do replikacji, FAQ Slony-I sugeruje, że idle in transactionmoże oznaczać, że połączenie sieciowe zostało nagle przerwane. Sprawdź dyskusję w tym FAQ, aby uzyskać więcej informacji.

Anonymoose
źródło
9
Co oznacza tylko „bezczynność”? Czy transakcje w stanie „bezczynności” również są otwarte?
Yousuf Sultan
2
Co oznacza monitor ?
Abdull
2
@Abdull Klient psql. „Monitor” to (najwyraźniej) archaiczne określenie oprogramowania używanego do sterowania bazą danych.
Anonymoose
@YousufSultan Zobacz: dba.stackexchange.com/a/202028/26781
pdoherty926
18

Jak wspomniano tutaj: Re: BUG # 4243: Bezczynność w transakcji , prawdopodobnie najlepiej jest sprawdzić tabelę pg_locks, aby zobaczyć, co jest blokowane, a to może dać ci lepszą wskazówkę, gdzie leży problem.

Arthur Thomas
źródło