Каждое соединение с SQL Server требует выделения определенного объема памяти, поэтому в этом отношении необходимо учитывать производительность.
Однако в схеме вещей 20-30 соединений - это очень небольшое число.
Подтвердили ли вы, что все соединения принадлежат вашему приложению? Причина, по которой я спрашиваю, заключается в том, что сам SQL Server устанавливает и поддерживает определенное количество соединений / сеансов в рамках общей работы серверов.
Некоторые полезные DMV для вас:
select * from sys.dm_exec_connections
select * from sys.dm_exec_sessions
Идентификаторы сеанса выше 51, так сказать, извне SQL Server, то есть пользовательские сеансы.
Далее к комментариям:
SQL Server 2005 может поддерживать до 32 767 подключений. Для проверки вашей способности выполните:
select @@MAX_CONNECTIONS
Если используется пул соединений, то соединения будут оставаться открытыми и находиться в спящем состоянии до тех пор, пока они не потребуются для обработки запросов. В качестве альтернативы, возможно, приложение не закрывает соединения после завершения обработки запросов.
Я могу комментировать только с точки зрения SQL Server, так как не знаком с механикой NHibernate.