Что это значит, когда процесс PostgreSQL "бездействует в транзакции"?

Что означает, когда процесс PostgreSQL является "незанятым в транзакции"?

На сервере, на котором я смотрю, вывод "ps ax | grep postgres" я вижу 9 процессов PostgreSQL, которые выглядят следующим образом:

postgres: user db 127.0.0.1(55658) idle in transaction

Означает ли это, что некоторые из процессов зависают, ожидая совершения транзакции? Любые указатели на соответствующую документацию оценены.

Ответ 1

Руководство по PostgreSQL указывает, что это означает, что транзакция открыта (внутри BEGIN) и неактивна. Скорее всего, пользователь подключается к монитору, который думает или печатает. У меня тоже много таких в моей системе.

Если вы используете Slony для репликации, Slony-I FAQ предлагает idle in transaction может означать, что сетевое подключение было прекращено резко. Ознакомьтесь с обсуждением в этом FAQ для более подробной информации.

Ответ 2

Как упоминалось здесь: Re: BUG # 4243: Idle in transaction, вероятно, лучше всего проверить свою таблицу pg_locks, чтобы увидеть, что блокируется и это может дать вам лучшую подсказку, где проблема.