Sobes.tech
Middle

Ako identifikovať zaseknuté transakcie v PostgreSQL?

sobes.tech AI

Odpoveď od AI

V PostgreSQL sú zaseknuté transakcie tie, ktoré zostávajú dlhý čas v stave aktívne alebo idle in transaction, bez ukončenia. Na ich identifikáciu môžete použiť dotaz na systémový katalóg pg_stat_activity.

Príklad dotazu na vyhľadanie takýchto transakcií:

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;

Tu sledujeme transakcie, ktoré sú v stave "idle in transaction" alebo "active" a trvajú viac ako 5 minút. Takéto transakcie môžu blokovať iné operácie a spôsobovať zaseknutia.

Pre hlbšiu analýzu môžete skontrolovať zámky cez pg_locks a spojiť ich s transakciami z pg_stat_activity.