Rol ve veritabanı bazında statement_timeout / lock_timeout tanımla
PostgreSQLOturumKomut
-- Uygulama rolü: kısa sorgular, kısa lock beklemesi, unutulan transaction'a sınır
ALTER ROLE web_app SET statement_timeout = '30s';
ALTER ROLE web_app SET lock_timeout = '5s';
ALTER ROLE web_app SET idle_in_transaction_session_timeout = '10min';
-- Raporlama rolü yalnızca bu veritabanında daha uzun çalışabilsin
ALTER ROLE report_app IN DATABASE veritabani SET statement_timeout = '15min';
-- Tanımlı rol/veritabanı ayarlarını gör
SELECT coalesce(r.rolname, '(all)') AS role,
coalesce(d.datname, '(all)') AS database,
s.setconfig
FROM pg_db_role_setting s
LEFT JOIN pg_roles r ON r.oid = s.setrole
LEFT JOIN pg_database d ON d.oid = s.setdatabase
ORDER BY 1, 2;
-- Geri al
ALTER ROLE web_app RESET lock_timeout;Ne yapar?
Zaman aşımı parametrelerini rol (ve isteğe bağlı olarak veritabanı) düzeyinde kalıcı hale getirir; global ayarı değiştirmeden her iş yükünü kendi sınırıyla çalıştırır.
Ne zaman kullanılır?
Kaçak sorguların kaynakları tüketmesini, DDL/lock kuyruklarının uygulamayı kilitlemesini ve unutulan transaction'ların bloat üretmesini önlemek için.
Dikkat
Ayarlar yalnızca YENİ oturumlarda etkin olur; havuzdaki mevcut bağlantıları yenile. Kullanıcı oturumda SET ile değeri değiştirebilir; bu bir güvenlik sınırı değildir. statement_timeout'u postgresql.conf'ta global ayarlama: pg_dump, VACUUM, CREATE INDEX gibi bakım işleri de kesilir. Öncelik sırası: rol+veritabanı > rol > veritabanı > postgresql.conf.
İlgili
- Backend'i sonlandır (pg_terminate_backend)
- Çalışan sorguyu iptal et (pg_cancel_backend)
- Aktif ve bloklayan sorguları gör
- Blocking ağacını çıkar (kök bloklayan oturumu bul)
- Bekleyen lock'ları nesne ve lock modu düzeyinde ayrıntılı gör (pg_locks)
- Uzun süren ve 'idle in transaction' kalan transaction'ları bul