RE:NODE
Обзор хостинга

Базы данных6 мин чтения

Пулы соединений и ошибка, которая приходит в худший момент

«Слишком много клиентов» — ошибка конфигурации, а не ёмкости. Как работает пул, как подобрать размер и почему больше соединений делает всё медленнее.


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

Почему больше не значит лучше

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

  • Размер пула считается на процесс. Четыре процесса с пулом по двадцать — это восемьдесят соединений, а не двадцать.
  • Фоновым worker-ам нужен свой бюджет, и в этой сумме о них обычно забывают.
  • Оставьте запас, чтобы вы сами могли подключиться клиентом, когда что-то не так.

Утечка

Соединение, которое взяли и не вернули, потеряно до перезапуска процесса. Если пул медленно исчерпывается за часы, а перезапуск лечит, вам не не хватает ёмкости: в коде есть путь, который забывает освобождать.