sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Qué puede causar inactividad en la transacción para declaraciones BEGIN?

Las transacciones no se bloquean en absoluto. La base de datos está esperando que la aplicación envíe la siguiente declaración.

El bloqueo en el ID de la transacción es solo una técnica para que las transacciones se bloqueen entre sí, incluso si no compiten por un bloqueo de tabla (por ejemplo, si están esperando un bloqueo de fila):cada transacción tiene un bloqueo exclusivo por sí misma. ID de transacción, y si tiene que esperar a que se complete una transacción concurrente, simplemente puede solicitar un bloqueo en el ID de esa transacción (y ser bloqueado).

Si todas las transacciones se ven así, entonces el bloqueo debe estar en algún lugar de su aplicación; la base de datos no está involucrada.

Cuando busque procesos bloqueados en la base de datos, busque filas en pg_locks donde granted es falso.