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.