Connection pooling — это поддержание набора предварительно установленных, переиспользуемых соединений с базой данных вместо создания и разрушения нового соединения для каждого входящего запроса.
Установление «сырого» соединения с базой данных — это дорого — оно включает:
Повторение этого процесса при каждом запросе добавляет значительные задержки и тратит ресурсы при высокой нагрузке.
Пул заранее создаёт определённое количество соединений при запуске и раздаёт их между запросами. Когда запросу нужен доступ к данным, он берёт соединение из пула и возвращает его после завершения — без необходимости каждый раз устанавливать или разрывать соединение.
Популярные реализации:
HikariCP — лёгкий connection pool для JavaPgBouncer — connection pooler для PostgreSQLProxySQL — proxy-based pool для MySQLЭти инструменты управляют жизненным циклом соединений, выполняют health checks и контролируют лимиты на количество соединений.
Размер пула — самый важный параметр:
Распространённая формула для начального расчёта:
pool_size = (core_count * 2) + effective_spindle_count
Connection pooling — это фундаментальная оптимизация производительности. Она снижает задержки, уменьшает расход ресурсов и повышает throughput. Однако в полную силу всё это работает только при правильно подобранном размере пула — с учётом твоей нагрузки и возможностей базы данных.
Connection pooling в базе данных снижает latency главным образом за счёт исключения необходимости выполнять TCP handshakes, authentication и SSL/TLS negotiation для каждого входящего запроса.
Новый — ещё не проверен сообществом
Вы