PostgreSQL "remaining connection slots are reserved" — Bu, Bağlantı Sınırının Son Uyarısı
"remaining connection slots are reserved" hatasının max_connections ile ilişkisi, süper kullanıcı kurtarma penceresi ve bağlantıyı tüketen uygulamayı bulma yöntemi.
Hata mesajı semptomdur, kök neden değildir. Sunucuyu yeniden başlatmadan veya rastgele ayar değiştirmeden önce aşağıdaki "Nedeni ayırt eden tek sorgu"yu çalıştırarak gerçek senaryoyu netleştirin.
▸Belirti
FATAL: remaining connection slots are reserved for non-replication superuser connectionsBu mesaj, too many clients already hatasından bir adım öncedir ve aradaki fark kritiktir. Burada superuser_reserved_connections (varsayılan 3) kadar slot hâlâ boştur — yani süper kullanıcı olarak veritabanına hâlâ bağlanabilirsiniz. Bu, size verilmiş kurtarma penceresidir. O pencereyi kullanmazsanız bir sonraki aşama, kimsenin bağlanamadığı tam kesintidir.
▸Adım adım acil müdahale
1. Kurtarma penceresini kullanın. Süper kullanıcı ile bağlanıp durumu görün:
SELECT count(*) AS toplam,
current_setting('max_connections')::int
- current_setting('superuser_reserved_connections')::int AS kullanilabilir
FROM pg_stat_activity;2. Kim tüketiyor?
SELECT usename, application_name, state, count(*),
max(now() - state_change) AS en_uzun_sure
FROM pg_stat_activity
GROUP BY 1, 2, 3
ORDER BY 4 DESC;application_name sütunu boş (NULL veya boş string) ise bağlantı kaynağını bulmak için IP bazlı dağılıma bakın:
SELECT client_addr, count(*)
FROM pg_stat_activity
GROUP BY 1
ORDER BY 2 DESC;3. Boşta olanları sonlandırın, aktif olanlara dokunmayın.
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE state = 'idle'
AND pid <> pg_backend_pid();active oturumları sonlandırmayın; yarıda kalan bir işlem veri tutarsızlığı riski yaratabilir. idle in transaction oturumları ise öncelikli hedeftir — hem slot tutar hem kilit tutarlar.
4. Rol bazlı bağlantı sınırı koyun. Tek bir servis veya uygulamanın tüm kapasiteyi yemesini engellemenin en hızlı yolu:
SELECT rolname, rolconnlimit FROM pg_roles WHERE rolconnlimit <> -1;
ALTER ROLE uygulama_kullanici CONNECTION LIMIT 40;5. Kalıcı çözüm. max_connections'ı rastgele yükseltmek yanlış reflekstir: her bağlantı 5–10 MB bellek tüketir. Doğru sıra: uygulama havuzunu küçült → PgBouncer (transaction modu) → oturum zaman aşımları:
ALTER SYSTEM SET idle_session_timeout = '10min';
ALTER SYSTEM SET idle_in_transaction_session_timeout = '60s';
SELECT pg_reload_conf();6. İzleme ajanlarını kontrol edin. Bu hatanın sinsi bir nedeni, her veritabanına ayrı bağlanan izleme araçlarıdır: 30 veritabanı × 2 bağlantı = 60 slot. İzleme aracınızın bağlantı havuzunu sınırlandırın.
▸Bunu bir daha yaşamamak için
Bağlantı sayısını max_connections'ın %70'i seviyesinde alarm eşiği yapın. Bağlantı sayısı ile işlem sayısını (xact_commit) birlikte izleyin: bağlantı artarken işlem sayısı sabitse sorun havuzsuz mimaridir.
- •İlgili Hata: FATAL: sorry, too many clients already
- •İlgili CheatSheet: psql CLI Hızlı Referans
Diğer Veritabanı Hata Teşhisleri
Kriz anında başvurabileceğiniz diğer doğrulanmış hata rehberleri.
PostgreSQL too many clients already Hatası: 6 Adımda Çözüm
FATAL: sorry, too many clients already hatasının üç nedeni, nedeni ayırt eden tek sorgu ve max_connections ile PgBouncer üzerinden kalıcı çözümü.
PostgreSQL password authentication failed Hatası: Neden ve Çözüm
psql password authentication failed hatasının dört nedeni: yanlış şifre, md5/SCRAM uyuşmazlığı, pg_hba.conf sırası ve yanlış cluster. Adım adım teşhis.
MySQL ERROR 1045 Access denied: root Şifresi Sıfırlama Rehberi
MySQL 1045 hatasının dört nedeni, "using password: YES/NO" ayrımının anlamı ve kilitli kalınca --init-file ile güvenli şifre sıfırlama.