PostgreSQL Uzun ve Idle-in-Transaction Oturumlar
Açık transaction'ları yaş, kullanıcı, kilit ve xmin bağlamında teşhis eder; vacuum'u engelleyen oturumları kontrollü biçimde sonlandırır.
Operasyonel Güvenlik ve Risk Uyarısı
Bu runbook müdahale adımları içerir; birçok adım yazma etkilidir (KILL, terminate, DROP, RESIZE). Önce test ortamında deneyin, üretimde adımları sırayla ve doğrulayarak uygulayın.
1. Belirti / Symptom
- M7 en eski transaction yaşı > 5 dakika; oturumlar `idle in transaction` durumunda saatlerce kalır.
- Dead tuple artışı, kilit beklemeleri veya WAL tutulması aynı dönemde yükselir.
2. Etki / Impact
MVCC temizliği gecikir, bloat ve XID riski büyür. Oturum kilit tutuyorsa diğer sorguları bloklar. Her uzun transaction aynı ölçüde sorun yaratmaz; `backend_xmin` ve kilit durumunu doğrulayın.
3. Teşhis / Diagnosis
SELECT pid, usename, application_name, client_addr, state,
now() - xact_start AS xact_age, backend_xmin,
wait_event_type, wait_event, left(query, 180) AS last_query
FROM pg_stat_activity
WHERE xact_start IS NOT NULL AND pid <> pg_backend_pid()
ORDER BY xact_start;SELECT gid, prepared, owner, database FROM pg_prepared_xacts ORDER BY prepared;
SELECT slot_name, xmin, catalog_xmin FROM pg_replication_slots;4. Müdahale / Response
SELECT pg_cancel_backend(12345); -- yalnızca active sorgu içinSELECT pg_terminate_backend(12345); -- PID'i yeniden doğrulayınALTER ROLE uygulama_rolu SET idle_in_transaction_session_timeout = '5min';PG 9.6+; iş yüküne uygun değer seçin. PG 14+ `idle_session_timeout` **yalnızca** transaction dışı idle oturumlar içindir.
5. Doğrulama / Verification
- M7 düşüyor; aynı rol/uygulama kaynaklı uzun transaction tekrarlamıyor.
- S2 bloklayıcı zinciri boş, vacuum yeniden ilerliyor; uygulamada başarısız transaction sayısı yükselmiyor.
6. Geri Alma / Rollback
- Sonlandırılan transaction geri döndürülemez; uygulamada yeniden başlatılmalıdır.
- Timeout değişikliğini `ALTER ROLE uygulama_rolu RESET idle_in_transaction_session_timeout;` ile kaldırın; mevcut oturumlarda etkin ayar ayrıca kontrol edilmelidir.