Sobes.tech
Middle

Как да определим зависнали транзакции в PostgreSQL?

sobes.tech AI

Отговор от AI

В PostgreSQL, зависналите транзакции са тези, които остават дълго време в състояние на активна или idle in transaction, без да приключват. За да ги идентифицирате, можете да използвате заявка към системния каталог pg_stat_activity.

Примерна заявка за намиране на такива транзакции:

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;

Тук разглеждаме транзакции, които са в състояние "idle in transaction" или "active" и продължават повече от 5 минути. Тези транзакции могат да блокират други операции и да причинят зависвания.

За по-дълбок анализ може да проверите блокировките чрез pg_locks и да ги свържете с транзакциите от pg_stat_activity.