В выпуске SQL Server 2012 Standard я знаю, что максимальное количество пользовательских подключений составляет 32 767. Что я должен делать как администратор базы данных, если я направляюсь к этому номеру?
В настоящее время существует 30 000 пользовательских подключений, и ожидается, что это число увеличится.
Ответы:
Максимальное количество соединений в разных версиях SQL Server и изданий 32767.
Вы можете определить, сколько подключений в настоящее время имеет SQL Server, посмотрев:
Если соотношение между используемыми и неиспользуемыми соединениями из вышеприведенного запроса имеет отношение, вероятно, что пул соединений включен клиентскими приложениями, подключенными к серверу, и эти соединения используются неэффективно. Возможно, вы захотите, чтобы разработчики изменили строку подключения для этих приложений, чтобы ограничить размер пула соединений и убедиться, что они правильно распределяют соединения. Если соединения расположены неправильно, они останутся открытыми, пока запущено клиентское приложение.
Если вы чувствуете себя особенно бешеным и вам нужно избавиться от всех соединений, которые в последнее время ничего не выполняли (независимо от того, выполняют ли они в настоящий момент работу), вы можете запустить следующий код, который сгенерирует список сеансов, которые может быть убит. Вам нужно будет скопировать и вставить сгенерированные команды в новое окно SSMS, чтобы фактически запустить команды. Я также рекомендую обновлять ваше резюме на всякий случай .
Можно линейно масштабировать количество соединений за пределами 32 767 путем разделения данных между несколькими узлами SQL Server. Однако, по моему мнению, использование шардинга в качестве способа обойти ограничение количества соединений аналогично использованию атомной бомбы для уничтожения паука. Он будет убивать паука, но вы просто могли бы иметь большие проблемы в конце дня. Не говоря уже о том, что создать атомную бомбу чертовски сложно, не говоря уже о том, чтобы правильно использовать шардинг.
источник
is_user_process
квалификатор, и, конечно, не мешало бы исключить сеансы, которые имеютlast_request_start_time
несколько недавний характер. Как недавно? Еще один хороший вопрос.В прошлом я сталкивался со странным поведением с пулами соединений, и ваш сценарий хорошо согласуется с одной из этих ситуаций. Если ваше приложение использует пул соединений (и пока это предположение, пока вы не подтвердите или не опровергнете это), у вас будет много открытых соединений. Это по замыслу.
Пул соединений нацелен на сокращение накладных расходов на создание соединения с базой данных. Возьмем, к примеру, пул соединений, равный 3. Насколько я могу судить, жизненный цикл проходит примерно так (начиная с кеша пулов холодных соединений):
sp_reset_connection
в потоке 1Это упрощение, но основные моменты включают в себя:
sp_reset_connection
вызывается.Вот справочный материал, который я использовал, чтобы прийти к этим выводам.
Пул соединений для администратора SQL Server
Дело об осиротевшей сделке
источник