PostgreSQL Rol Bağlantı Limiti Aşımı: Nedenleri, Acil Limit Artırımı ve Rol Bazlı Havuzlama
ALTER ROLE ... CONNECTION LIMIT kısıtlamasının uygulama pod artışıyla dolması, acil limit düzenleme ve PgBouncer kullanıcı bazlı havuz mimarisi.
Operasyonel Doğrulama & Güvenilirlik Standardı
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
Belirli bir mikroservis bağlantı kurmaya çalıştığında reddedilirken diğer servisler sorunsuz çalışır:
FATAL: too many connections for role "app_user"▸Sahada Ne Görürsün?
Süper kullanıcı ve diğer roller bağlanabilir. Ancak app_user kullanan pod'lar bağlantı havuzu zaman aşımına (HikariPool - Connection is not available) uğrar.
▸Kök Neden Matrisi
| Olasılık | Kök Neden | Açıklama |
|---|---|---|
| %65 | Uygulama Pod Ölçeklenmesi | CONNECTION LIMIT 20 belirlenmiştir. Pod sayısı 2'den 6'ya çıkınca kota anında patlar. |
| %25 | Bağlantı Sızıntısı (Connection Leak) | Uygulama idle oturumları kapatmamış, kotayı doldurmuştur. |
| %10 | Katı Limit Politikası | DBA limiti trafik artışına göre güncellenmemiştir. |
▸ACİL RUNBOOK (0-5dk)
-- 1. Rol limitini ve mevcut oturumları gör
SELECT rolname, rolconnlimit FROM pg_roles WHERE rolname = 'app_user';
SELECT count(*), state FROM pg_stat_activity WHERE usename = 'app_user' GROUP BY state;
-- 2. Acil kotayı geçici kaldır (-1 = sınırsız)
ALTER ROLE app_user CONNECTION LIMIT -1;
-- 3. Boştaki oturumları sonlandır
SELECT pg_terminate_backend(pid) FROM pg_stat_activity
WHERE usename = 'app_user' AND state = 'idle' AND state_change < now() - interval '5 minutes';▸KALICI BLUEPRINT
- 1PgBouncer Havuzlama: İstemciler doğrudan değil PgBouncer üzerinden bağlanmalıdır.
- 2Rol Limiti: Pod Sayısı x Havuz x 1.2 formülü uygulanmalıdır:
ALTER ROLE app_user CONNECTION LIMIT 60;- 1Oturum Zaman Aşımları:
ALTER ROLE app_user SET idle_in_transaction_session_timeout = '1min';
▸Doğrulama
SELECT r.rolname, r.rolconnlimit, count(s.pid) AS active_connections
FROM pg_roles r LEFT JOIN pg_stat_activity s ON r.rolname = s.usename
WHERE r.rolname = 'app_user' GROUP BY r.rolname, r.rolconnlimit;Diğer Veritabanı Hata Teşhisleri
Kriz anında başvurabileceğiniz diğer doğrulanmış hata rehberleri.
PostgreSQL Bağlantı Tükenmesi ve too many clients Teşhisi
FATAL: sorry, too many clients already ve remaining connection slots hatalarının üç temel kök nedeni, yetki sınırlarıyla salt okunur pg_stat_activity teşhisi ve kalıcı iki katmanlı havuzlama çö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.
PostgreSQL connection refused: 8 Adımda Kesin Teşhis
Connection refused, timeout ve "no pg_hba.conf entry" arasındaki fark; listen_addresses, port, firewall ve Docker port yayınlama kontrolleri.