Как пользоваться
- Введите число ядер CPU сервера базы данных (физических, без гиперпоточности) и число дисков с данными.
- Введите, сколько экземпляров приложения (подов, процессов) работает с базой.
- Введите общую частоту запросов и среднее время, на которое запрос занимает соединение, включая сетевые задержки и время внутри транзакции.
Формулы
- Пул всего = ядра × 2 + эффективные диски
- На экземпляр = ceil(пул всего ÷ экземпляры)
- Занятые соединения (закон Литтла) = запросов в секунду × время запроса в секундах
- Загрузка = занятые ÷ пул всего
Пример
База с 8 ядрами и 1 диском, 2 экземпляра приложения, 400 запросов в секунду по 15 мс:
- пул всего: 8 × 2 + 1 = 17;
- на экземпляр: ceil(17 ÷ 2) = 9;
- занято: 400 × 0,015 = 6 соединений; загрузка 6 ÷ 17 = 35,3 %.
Советы
- При загрузке выше 100 % запросы встают в очередь. Прежде чем добавлять соединения, ускорьте запросы или сократите время, на которое транзакции держат соединение.
- Учитывайте всех клиентов. Фоновые воркеры, задачи cron и инструменты администратора расходуют тот же лимит базы (max_connections в PostgreSQL).
- Держите пул постоянным. Если минимальное число простаивающих соединений равно максимуму, не будет всплесков задержки, когда пулу под нагрузкой приходится открывать новые соединения.