Aashish68 Ответов: 1

Как автоматически закрыть 0(нулевое) использование процессора SQL-соединений?


Мое веб-приложение и Android APP WEB API используют одну и ту же базу данных,проблема в том, что 0(нулевая) загрузка процессора соединения не закрываются автоматически, мне приходится запускать код вручную, чтобы убить их.

Что я уже пробовал:

Я должен выполнить это вручную вместо этого мне нужно закрыть его автоматически

set nocount on
declare @databasename varchar(100)
declare @query varchar(max)
set @query = ''

set @databasename = 'xxx'
if db_id(@databasename) < 4
begin
	print 'system database connection cannot be killeed'
return
end

select @query=coalesce(@query,',' )+'kill '+convert(varchar, spid)+ '; '
from master..sysprocesses where dbid=db_id(@databasename)

if len(@query) > 0
begin
print @query
	exec(@query)
end

1 Ответов

Рейтинг:
1

Wendelius

Почему вы хотите закрыть открытое соединение силой со стороны сервера?

Правильный способ обработки соединений - открывать и закрывать их со стороны клиента. Закрытие соединения со стороны сервера должно быть редким исключением.

База данных предназначена для обработки нескольких соединений одновременно. Одни из них активны, другие бездействуют. В принципе, простое соединение не слишком больно, но, как уже было сказано, хороший дизайн программного обеспечения не держит соединения открытыми без необходимости.


Aashish68

Соединения правильно открываются и закрываются на стороне клиента.Простаивающие соединения увеличиваются и делают приложение медленнее.Как я могу автоматически отключить неработающие соединения

Wendelius

Если вы видите соединение на стороне сервера, оно не закрыто.

Если клиент правильно закроет соединение, то есть вероятность, что оно будет возвращено в пул соединений для последующего использования. Это делается для экономии времени, когда соединение требуется снова.

Время жизни соединения можно контролировать. Для получения дополнительной информации взгляните на Объект sqlconnection.Свойство ConnectionString (System.Data.SqlClient)[^] и ADO.NET неверно понятое ключевое слово строки соединения управляемого пула “время жизни соединения”. – Анхель Саенс-Badillos[^]

Aashish68

Таким образом, очистка пулов соединений очистит простаивающие соединения?

Wendelius

Очистка пула соединений сбрасывает пул, поэтому неиспользуемые соединения удаляются. Если некоторые из этих связей используются, естественно, они остаются.

Однако очистка пула также означает, что в следующий раз, когда потребуется подключение, потребуется больше времени для открытия int.

Я бы рекомендовал исследовать параметр "максимальный размер пула". Если вы видите слишком много незанятых соединений, уменьшение размера пула может помочь вам сохранить эту сумму более разумной, не вызывая ненужной задержки при открытии соединений.