Sobes.tech
Middle

Jak zidentyfikować zawieszone transakcje w PostgreSQL?

sobes.tech AI

Odpowiedź od AI

W PostgreSQL, zawieszające się transakcje to te, które pozostają przez długi czas w stanie aktywnym lub idle in transaction, nie kończąc się. Aby je zidentyfikować, można użyć zapytania do katalogu systemowego pg_stat_activity.

Przykład zapytania do wyszukiwania takich transakcji:

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;

Tutaj sprawdzamy transakcje, które są w stanie "idle in transaction" lub "active" i trwają dłużej niż 5 minut. Takie transakcje mogą blokować inne operacje i powodować zawieszenia.

Dla głębszej analizy można sprawdzić blokady za pomocą pg_locks i powiązać je z transakcjami z pg_stat_activity.