Простой ответ на ваши вопросы - «это зависит»; т.е. нет простого ответа или волшебной формулы.
Каждый выполняемый вами запрос к базе данных имеет этапы, которые включают вычисления на стороне клиента, этапы, которые требуют вычислений и дискового ввода-вывода на сервере, и этапы, которые включают передачу запроса и результатов по сети. Для любого данного запроса эти шаги выполняются в определенном порядке. А реальное время выполнения запроса - это реальное время, необходимое для выполнения каждого из шагов, один за другим.
Предположим (ради аргумента), что запросы независимы; то есть один запрос не блокирует ресурс, от которого зависит другой.
Теперь, если ваша рабочая нагрузка достаточно мала (в зависимости от самих запросов и количества потоков на стороне клиента), то отдельные шаги каждого запроса будут потреблять все больше и больше (соответствующих) ресурсов (ЦП, ввод-вывод). пропускная способность). Вы можете продолжать увеличивать количество потоков на стороне клиента, но в какой-то момент один из ресурсов, вероятно, будет чрезмерно выделен ... и вы столкнетесь с узким местом. Как только вы достигнете этой точки, увеличение количества клиентских потоков не делает вещи быстрее. Зайдите слишком далеко, и пропускная способность может фактически начать падать из-за различных эффектов конфликта ресурсов.
В: Можем ли мы предсказать, каким будет предел пропускной способности?
A: Не без глубокого анализа всей системы и рабочей нагрузки, что ... не практично.
В: Можем ли мы предсказать, каким будет узкое место?
A: Не без глубокого анализа всей системы и рабочей нагрузки, что ... не практично.
В: Можем ли мы определить оптимальное количество потоков на стороне клиента для заданного количества ядер на стороне клиента.
A: Не без знания ответов на два предыдущих вопроса.
В: Так каков практический способ решения этой головоломки о том, как определить размер пула потоков?
A: Бенчмаркинг и настройка!
Определите, какова ваша реальная рабочая нагрузка, создайте ориентировочный эталонный тест (или отнеситесь к своей рабочей нагрузке как эталонный) и запускайте его многократно, регулируя количество потоков на стороне клиента вверх или вниз. В то же время измерьте фактическую загрузку ЦП и В / В на клиенте и в базе данных, чтобы попытаться определить, где находится фактическое узкое место в ресурсах. Эти меры могут быть полезны для других видов настройки (например, оптимизация базы данных и запросов, настройка сети) и для принятия решения о том, требуется ли вам больше оборудования, более быстрые сетевые интерфейсы и т. Д.
Если вы берете «тест и настройку», вам не нужен точный прогноз количества потоков.