Bağlantı kullanımını max_connections'a göre ölç
PostgreSQLOturumKomut
-- Kapasite: kullanılan ve normal kullanıcılara kalan slot
SELECT max_conn,
reserved,
used,
max_conn - reserved - used AS free_for_normal_users,
round(100.0 * used / max_conn, 1) AS used_pct
FROM (SELECT current_setting('max_connections')::int AS max_conn,
current_setting('superuser_reserved_connections')::int
+ coalesce(current_setting('reserved_connections', true)::int, 0) AS reserved,
(SELECT count(*) FROM pg_stat_activity WHERE backend_type = 'client backend') AS used) x;
-- Dağılım: veritabanı, kullanıcı, uygulama ve duruma göre
SELECT datname, usename, application_name, state,
count(*) AS sessions,
max(now() - state_change) AS longest_in_state
FROM pg_stat_activity
WHERE backend_type = 'client backend'
GROUP BY datname, usename, application_name, state
ORDER BY sessions DESC;
-- Rol ve veritabanı bağlantı limitleri
SELECT rolname, rolconnlimit FROM pg_roles WHERE rolconnlimit <> -1;
SELECT datname, datconnlimit FROM pg_database WHERE datconnlimit <> -1;Ne yapar?
max_connections'a göre kullanılan ve normal kullanıcılara kalan bağlantı slotlarını, bağlantıların veritabanı/kullanıcı/uygulama/durum dağılımını ve tanımlı CONNECTION LIMIT'leri gösterir.
Ne zaman kullanılır?
'too many clients already' / 'remaining connection slots are reserved' hatalarında, kapasite planlamasında veya pooler ihtiyacını değerlendirirken.
Dikkat
max_connections yalnızca client backend'leri sınırlar; autovacuum worker'ları, background worker'lar ve walsender'lar ayrı slot kullanır. Son superuser_reserved_connections (PG16+ ek olarak reserved_connections) slot normal kullanıcılara kapalıdır. max_connections'u yüzlerce/binlerce yapmak yerine PgBouncer gibi bir pooler kullan: her bağlantı ayrı bir süreçtir ve bellek, snapshot maliyeti bağlantı sayısıyla büyür. Çok sayıda 'idle' oturum uygulama havuzunun gereğinden büyük olduğunu gösterir. Kaçak bir uygulamanın tüm slotları tüketmesini ALTER ROLE ... CONNECTION LIMIT ile engelle; max_connections değişikliği restart ister.
İ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