у меня большие проблемы здесь, ну, на моем сервере.
У меня на сервере работает ASP .net web (framework 4.x), все транзакции / выбор / обновление / вставка выполняются с помощью ADO.NET.
Проблема в том, что после некоторого использования (несколько обновлений / выборок / вставок) иногда я получал более 100 подключений в состоянии «спящего» при проверке подключений на сервере sql с помощью этого запроса:
SELECT
spid,
a.status,
hostname,
program_name,
cmd,
cpu,
physical_io,
blocked,
b.name,
loginame
FROM
master.dbo.sysprocesses a INNER JOIN
master.dbo.sysdatabases b ON
a.dbid = b.dbid where program_name like '%TMS%'
ORDER BY spid
Я проверяю свой код и закрываю каждый раз, когда устанавливаю соединение, я собираюсь протестировать новый класс, но боюсь, что проблема не будет решена.
Предполагается, что пул соединений сохраняет соединения для их повторного использования, но пока я не увижу, не используйте их повторно всегда.
Любая идея, кроме проверки закрытия всех соединений, открытых после их использования?
РЕШЕНИЕ (теперь у меня только одно красивое соединение в состоянии "спящего"):
Помимо ответа Дэвид Стрэттон , я хотел бы поделиться этой ссылкой, которая очень хорошо объясняет, как работает пул соединений: http://dinesql.blogspot.com/2010/07/sql-server-sleeping-status- and.html
Чтобы быть кратким, вам необходимо закрыть каждое соединение (объекты соединения sql), чтобы пул соединений мог повторно использовать соединение и использовать ту же строку connectinos, чтобы убедиться, что это настоятельно рекомендуется использовать одну из файл webConfig.
Будьте осторожны с dataReaders, с которыми вы должны закрыть его соединение (это то, что меня некоторое время злило).