¿Cómo determinar si hay [conexiones inactivas con] transacciones no confirmadas en PostgreSQL?

24

Según un comentario sobre esta pregunta que pregunté sobre las conexiones inactivas en PostgreSQL 9.2 , algunas transacciones no confirmadas (posiblemente relacionadas con algunas de esas conexiones inactivas) pueden causar algunos problemas de rendimiento.

¿Cuál es una buena manera de determinar si hay transacciones no confirmadas (puntos de bonificación si hay una manera de saber si la conexión en la que están inactivas o no)?

¡Muchas gracias!

Juan Carlos Coto
fuente
2
Echa un vistazo a pgtop. También puede buscar filas que muestren "inactivo en la transacción" en la salida de ps aux.
dezso
@dezso - se pgtopve interesante; ¿Hay un equivalente para Windows?
Max Vernon
@MaxVernon hay algunos indicios de que se supone que funciona en Windows, pero no he visto ningún ejemplo concreto. Pero sigue siendo un proyecto Perl (relativamente) simple, así que ... Y de todos modos, funciona en las vistas pg_stat *.
dezso

Respuestas:

16

Si desea ver cuántas conexiones inactivas tiene que tienen una transacción abierta, puede usar:

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

Esto proporcionará una lista de conexiones abiertas que están en estado inactivo, que también tienen una transacción abierta.

Dicho esto, no puedo recrear una conexión abierta en el estado inactivo que tiene una transacción abierta. Quizás alguien más pueda proporcionar detalles sobre cómo hacerlo.

Max Vernon
fuente
3
Tenga en cuenta que la statecolumna está presente solo en 9.2. Y para mí parece que el estado correcto es 'inactivo en la transacción'.
dezso
1
Estoy de acuerdo con dezso.
francos
1
state = 'idle'no no indicar una transacción abierta.
a_horse_with_no_name
2
I cannot recreate an open connection in the idle state that has an open transaction. Abra dos conexiones a la base de datos y escriba "comenzar"; en uno. En el otro, ejecute la consulta anterior y tendrá un idle in transaction.
X-Istence