PostgreSQL remaining connection slots reserved Hatası
PostgreSQL "remaining connection slots are reserved" — Bu, Bağlantı Sınırının Son Uyarısı
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
PostgreSQL Diğer Üretim Rehberleri
Aynı veritabanı motoruna ait doğrulanmış diğer içerikler.
PostgreSQL Backup'ınızı Doğrulayın: İlk Restore Tatbikatı
Backup job'unun başarılı bitmesi verinin geri dönülebildiğini kanıtlamaz. Bu runbook, izole tatbikat ortamında uçtan uca restore ve veri doğrulama adımlarını yürütür.
PostgreSQL Replication Lag: Darboğazı Adım Adım Teşhis Etme
Replica geriden geldiğinde sorun WAL üretiminde mi, ağ aktarımında mı yoksa replay darboğazında mı? Salt okunur sorgularla darboğazı adım adım tespit edin.
psql CLI Hızlı Referans
Bağlantı parametreleri, meta komutlar (\d, \l, \du), .psqlrc şablonu, COPY streaming ve anlık kilit/aktivite teşhis sorguları.