Sobes.tech
Middle

Jak určit zaseknuté transakce v PostgreSQL?

sobes.tech AI

Odpověď od AI

V PostgreSQL jsou zaseknuté transakce ty, které zůstávají dlouhou dobu v stavu aktivní nebo idle in transaction, aniž by byly ukončeny. K jejich identifikaci lze použít dotaz na systémový katalog pg_stat_activity.

Příklad dotazu pro hledání takových transakcí:

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;

Zde sledujeme transakce, které jsou ve stavu "idle in transaction" nebo "active" a trvají déle než 5 minut. Takové transakce mohou blokovat jiné operace a způsobovat zaseknutí.

Pro hlubší analýzu lze zkontrolovat zámky přes pg_locks a spojit je s transakcemi z pg_stat_activity.