🟡 Средний · 2 очк. SQL
Для чего нужны SetMaxOpenConns и SetMaxIdleConns у sql.DB в Go?
A Ограничивают количество таблиц в базе
B Управляют пулом соединений: максимум открытых и максимум простаивающих соединений к БД
C Ограничивают длину SQL-запросов
D Управляют количеством транзакций
Объяснение вопроса

sql.DB в Go - это пул соединений, а не одно соединение. Две ключевые настройки:

db, _ := sql.Open("postgres", dsn)

// Максимум открытых соединений (0 = безлимитно, опасно!)
db.SetMaxOpenConns(25)

// Максимум простаивающих соединений в пуле
db.SetMaxIdleConns(10)

// Максимальное время жизни соединения
db.SetConnMaxLifetime(5 * time.Minute)

// Максимальное время простоя
db.SetConnMaxIdleTime(1 * time.Minute)

Без SetMaxOpenConns при всплеске нагрузки Go откроет сотни соединений, что может убить PostgreSQL (каждое соединение ~10 МБ RAM). Рекомендуемые значения зависят от числа ядер БД-сервера, обычно 20-50.

SetMaxIdleConns определяет, сколько соединений держать "наготове" для быстрого обслуживания запросов без TCP handshake.

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.