Connection pooling అనేది అనేక క్లায়েంట్ అభ్యర్థనల కోసం డేటాబేస్ కనెక్షన్ల యొక్క చిన్న సమితిని పునర్వినియోగం చేస్తుంది, ప్రతి అభ్యర్థనకు కొత్త కనెక్షన్ను తెరిచే బదులు. PostgreSQL కనెక్షన్లు ఖరీదైనవి (ప్రతి ఒక్కటి ఆధ్యక్ష మెమరీ ఉపయోగించే ఎంధ ప్రక్రియ), కాబట్టి లోడ్ కింద పనితీరు మరియు స్కేలబిలిటీ కోసం పూలింగ్ అవసరం. PgBouncer అనేది ప్రామాణిక పూలర్.
సమస్య: PostgreSQL కనెక్షన్లు ఖరీదైనవి
Each PostgreSQL connection = a separate OS PROCESS, using ~5-10MB of memory.
✗ Opening a connection has overhead (process creation, auth, setup)
✗ Many connections (e.g. 1000s from a busy app) → huge memory use, contention
✗ Postgres has a max_connections limit (often ~100); exceeding it = errors
→ Opening/closing a connection per request, or holding thousands open, doesn't scale.
