Как называется механизм переиспользования ограниченного числа соединений с базой данных?

Пул соединений с БД: занятые и свободные соединения, ожидание ресурса, предел размера и корректное освобождение. Пример настроек database/sql в Go.

Короткий ответ

Что ответить на собеседовании

Это пул соединений — connection pool. Он выдаёт соединение для операции, а затем обычно сохраняет его для повторного использования вместо нового подключения на каждый запрос. Лимит открытых соединений задают отдельно; при исчерпании пула операции могут ждать освобождения ресурса. В Go sql.DB уже управляет таким пулом, а не представляет одно физическое соединение.

Подробный разбор

Ответ с пояснениями

Механизм называется пулом соединений, или connection pool. Он переиспользует подключения, снижая расходы на установление сетевого соединения, аутентификацию и подготовку сессии. Открытое соединение может быть занято операцией или свободно внутри пула; слово «активные» не всегда означает выполняющие запрос.

Типичный цикл: приложение запрашивает ресурс, пул предоставляет доступное соединение или создаёт новое в пределах настроенного лимита, операция выполняется, ресурс возвращается для последующего использования. При достижении лимита требуется ожидание либо отказ по правилам конкретной реализации и сроку запроса.

В Go объект *sql.DB уже содержит пул и рассчитан на совместное использование. Его не нужно открывать заново для каждого HTTP-запроса. Пример настроек существующего db:

db.SetMaxOpenConns(10)
db.SetMaxIdleConns(5)
db.SetConnMaxIdleTime(5 * time.Minute)
db.SetConnMaxLifetime(30 * time.Minute)

Для примера нужен импорт time. Числа иллюстративные: это не универсальные рекомендуемые значения. Предел открытых соединений включает занятые и свободные; размер свободной части и сроки использования задаются отдельно. См. управление соединениями в Go.

Пул не делает бесконечную нагрузку безопасной. При выборе размера учитывают возможности БД, длительность операций и суммарные лимиты всех экземпляров приложения. Слишком большой пул способен увеличить конкуренцию и ухудшить задержки.

Важно вовремя закрывать результаты запросов, завершать транзакции и освобождать явно полученные соединения согласно контракту библиотеки. Иначе ресурс останется занят, а новые запросы будут ждать. Для диагностики смотрят занятые и свободные подключения, количество и длительность ожиданий, медленные запросы и блокировки. Увеличение лимита без выяснения причины не устраняет утечку ресурса.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку