Что такое connection pooling?

Middle
1.2k просмотров
AFK Offer AI

Connection pooling — переиспользование уже установленных соединений вместо создания новых на каждый запрос. Создание TCP-соединения стоит дорого (handshake, TLS), а из пула забирается мгновенно.

В Go пулы встроены везде. database/sql имеет встроенный пул соединений к БД:

db, _ := sql.Open("postgres", connStr)
db.SetMaxOpenConns(25)
db.SetMaxIdleConns(10)
db.SetConnMaxLifetime(5 * time.Minute)

http.Transport пулит TCP-соединения для HTTP-запросов. pgxpool — пул для PostgreSQL с более тонкой настройкой.

Ключевые параметры: MaxOpenConns (максимум активных), MaxIdleConns (максимум простаивающих), ConnMaxLifetime (время жизни). Если пул исчерпан — запросы блокируются и ждут. Неправильная настройка пула — частая причина проблем с производительностью: слишком мало — тормоза, слишком много — перегрузка БД.

Следующий вопрос

UUID vs serial — что выбрать?