Middle
Kaip nustatyti užstrigusias transakcijas PostgreSQL?
sobes.tech AI
Atsakymas iš AI
PostgreSQL, įstrigusios transakcijos yra tos, kurios ilgą laiką lieka aktyvios arba idle in transaction būsenoje, nesibaigiant. Norint jas nustatyti, galima naudoti užklausą į sisteminį katalogą pg_stat_activity.
Pavyzdinė užklausa tokioms transakcijoms ieškoti:
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;
Čia stebime transakcijas, kurios yra būsenose "idle in transaction" arba "active" ir trunka ilgiau nei 5 minutes. Tokios transakcijos gali blokuoti kitas operacijas ir sukelti užšalimus.
Daugiau išsamiai analizei galima patikrinti užrakinimus per pg_locks ir susieti juos su pg_stat_activity transakcijomis.