Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Runbook: LongTransaction

Source of truth: tools/observability/alerts/angarabase_alerts.yaml. Backed by: RM-0.6.3.8 S7, RM-0.6.4.4 (SSI).

Что означает

angarabase_txn_oldest_snapshot_age_seconds > 300 — самая старая открытая транзакция живёт уже более 5 минут. Это блокирует MVCC GC и приводит к bloat.

Для SERIALIZABLE транзакций: длительное удержание транзакции также блокирует очистку (GC) SIREAD-блокировок и графа конфликтов SSI, что может привести к росту ложных прерываний (false positive aborts 40001) для новых транзакций из-за эскалации блокировок.

Severity

warning. При 30+ минутах превращается в реальный блокер для GC. Для SSI workloads — критично для производительности (throughput) из-за абортов.

Initial response

  1. Grafana Overview v2 → row “GC / MVCC”.
  2. Найти PID транзакции:
SELECT pid, age(now(), xact_start) AS age, state, query
FROM angara_stat_activity
WHERE state IN ('idle in transaction', 'active')
ORDER BY xact_start ASC LIMIT 5;

Diagnostics

curl -sf http://127.0.0.1:9898/metrics | rg -E 'txn_(oldest_snapshot|active|idle)'
curl -sf http://127.0.0.1:9898/metrics | rg gc_

Mitigation

ПричинаДействие
Клиент завис в idle in transactionВключить idle_in_transaction_session_timeout
Долгая аналитическая выборкаПеренести на read-replica; разбить на batched
Pgbouncer пулПроверить server_idle_timeout, рестартовать pool
Application bugИсправить на стороне клиента (transaction scope)

Принудительный abort (последняя мера):

SELECT pg_terminate_backend(<pid>);

Escalation

Если транзакция > 1 часа и блокирует GC до bloat > 30% — рассмотреть terminate + escalation, документировать инцидент.

Связанные