Middle
Como identificar transações penduradas no PostgreSQL?
sobes.tech IA
Resposta da IA
No PostgreSQL, transações penduradas são aquelas que permanecem por um longo período em estado de ativo ou idle in transaction, sem serem finalizadas. Para identificá-las, pode-se usar uma consulta ao catálogo do sistema pg_stat_activity.
Exemplo de consulta para procurar essas transações:
SELECT pid, usename, state, query, xact_start, now() - xact_start AS duration
FROM pg_stat_activity
WHERE state IN ('idle in transaction', 'active')
AND xact_start IS NOT NULL
AND now() - xact_start > interval '5 minutes'
ORDER BY duration DESC;
Aqui, observamos as transações que estão em estado "idle in transaction" ou "active" e que duram mais de 5 minutos. Essas transações podem bloquear outras operações e causar bloqueios.
Para uma análise mais aprofundada, pode-se verificar os bloqueios através de pg_locks e relacioná-los às transações de pg_stat_activity.