Максимальное количество соединений в разных версиях SQL Server и изданий 32767.
Вы можете определить, сколько подключений в настоящее время имеет SQL Server, посмотрев:
SELECT ConnectionStatus = CASE WHEN dec.most_recent_sql_handle = 0x0
THEN 'Unused'
ELSE 'Used'
END
, CASE WHEN des.status = 'Sleeping'
THEN 'sleeping'
ELSE 'Not Sleeping'
END
, ConnectionCount = COUNT(1)
FROM sys.dm_exec_connections dec
INNER JOIN sys.dm_exec_sessions des ON dec.session_id = des.session_id
GROUP BY CASE WHEN des.status = 'Sleeping'
THEN 'sleeping'
ELSE 'Not Sleeping'
END
, CASE WHEN dec.most_recent_sql_handle = 0x0
THEN 'Unused'
ELSE 'Used'
END;
Если соотношение между используемыми и неиспользуемыми соединениями из вышеприведенного запроса имеет отношение, вероятно, что пул соединений включен клиентскими приложениями, подключенными к серверу, и эти соединения используются неэффективно. Возможно, вы захотите, чтобы разработчики изменили строку подключения для этих приложений, чтобы ограничить размер пула соединений и убедиться, что они правильно распределяют соединения. Если соединения расположены неправильно, они останутся открытыми, пока запущено клиентское приложение.
Если вы чувствуете себя особенно бешеным и вам нужно избавиться от всех соединений, которые в последнее время ничего не выполняли (независимо от того, выполняют ли они в настоящий момент работу), вы можете запустить следующий код, который сгенерирует список сеансов, которые может быть убит. Вам нужно будет скопировать и вставить сгенерированные команды в новое окно SSMS, чтобы фактически запустить команды. Я также рекомендую обновлять ваше резюме на всякий случай .
DECLARE @cmd NVARCHAR(MAX);
SET @cmd = '';
SELECT @cmd = @cmd +
CASE WHEN @cmd = '' THEN '' ELSE CHAR(13) + CHAR(10) END
+ 'KILL ' + CONVERT(VARCHAR(MAX), dec.session_id) + ';'
FROM sys.dm_exec_connections dec
WHERE dec.most_recent_sql_handle = 0x0;
PRINT @cmd;
Можно линейно масштабировать количество соединений за пределами 32 767 путем разделения данных между несколькими узлами SQL Server. Однако, по моему мнению, использование шардинга в качестве способа обойти ограничение количества соединений аналогично использованию атомной бомбы для уничтожения паука. Он будет убивать паука, но вы просто могли бы иметь большие проблемы в конце дня. Не говоря уже о том, что создать атомную бомбу чертовски сложно, не говоря уже о том, чтобы правильно использовать шардинг.