DBAtlas · Veritabanı operasyon atlası

Bağlantı fırtınası (too many connections)

Belirti

'too many connections', 'ORA-00018', 'remaining connection slots reserved' — yeni bağlantılar reddediliyor.

1. Mevcut durumu ölç

Kaç bağlantı var, limit ne, ne kadarı aktif ne kadarı idle?

Oracle

SELECT COUNT(*) total, SUM(CASE WHEN status='ACTIVE' THEN 1 ELSE 0 END) active FROM v$session WHERE type='USER';

PostgreSQL

SELECT count(*), state FROM pg_stat_activity WHERE backend_type = 'client backend' GROUP BY state;

MySQL

SHOW STATUS LIKE 'Threads_connected'; SHOW VARIABLES LIKE 'max_connections';

SQL Server

SELECT COUNT(*), status FROM sys.dm_exec_sessions WHERE is_user_process=1 GROUP BY status;

Redis

INFO clients

2. Kaynağı tespit et: kim/nereden

Hangi uygulama/host/kullanıcı bağlantıları açıyor? Genelde tek bir uygulama sunucusunun pool'u patlamış ya da bağlantı sızıntısı vardır (idle in transaction yığını).

PostgreSQL

SELECT client_addr, usename, state, count(*) FROM pg_stat_activity WHERE backend_type = 'client backend' GROUP BY 1,2,3 ORDER BY 4 DESC;

MySQL

SELECT host, user, count(*) FROM information_schema.processlist GROUP BY host, user ORDER BY 3 DESC;

SQL Server

SELECT host_name, program_name, login_name, COUNT(*) FROM sys.dm_exec_sessions WHERE is_user_process=1 GROUP BY host_name, program_name, login_name ORDER BY 4 DESC;

3. Acil nefes aldır

Uzun süren idle/idle-in-transaction bağlantıları temizle. Gerekirse suçlu uygulamanın bağlantılarını topluca kes. Admin girişi için ayrılmış slot'u kullan (PG superuser_reserved_connections).

4. Doğru çözüm: connection pooling

max_connections'ı sınırsızca artırmak bellek tüketir ve sorunu erteler. Doğru çözüm uygulama tarafında bir connection pool (HikariCP, PgBouncer, ProxySQL) ve makul pool boyutudur. Pool boyutu genelde (çekirdek*2 + disk sayısı) civarıdır — Araçlar > Connection Pool hesaplayıcısına bak.

5. Sızıntıyı ve tekrarını önle

Uygulamada bağlantıların kapatıldığından emin ol (finally/using). idle_in_transaction_session_timeout, wait_timeout ayarla. Bağlantı sayısı için alarm kur.

DBAtlas'ta aç →