User-8621695 Ответов: 1

Спящее состояние Sql server увеличивается с помощью ADO.NET-что?


Привет Эксперты,

У нас есть один живой жерех.Сетевое приложение, которое используется примерно 1000 одновременными пользователями. В этом приложении мы использовали пул соединений. Есть 2 строки подключения, определенные в web.config с разным именем, но мы вызываем одну и ту же БД.

<add name="connection1" connectionString="Data Source=mySQLServer;Initial Catalog=myDatabase;Integrated Security=True;Connection Timeout=300;Connection Lifetime=0;Min Pool Size=0;Max Pool Size=100;Pooling=true;" />

<add name="connection2" connectionString="Data Source=mySQLServer;Initial Catalog=myDatabase;Integrated Security=True;Connection Timeout=300;Connection Lifetime=0;Min Pool Size=0;Max Pool Size=100;Pooling=true;" />


В моем приложении мы открываем и закрываем соединение везде как показано ниже

try{
    if (connection.State == ConnectionState.Closed)
        {
            connection.Open();
        }
}
catch(Exception ex)
{
}
finally{connection.close()}


Теперь проблема заключается в том, что когда я проверяю базу данных с помощью sp_who2, я вижу около 1000 или более спящих сеансов, и для каждой записи имя программы - ".Net sql server Provider". Я прошел через MSDN и обнаружил, что если мы используем пул соединений, то соединение остается открытым до 4-8 минут. Так что теперь я немного запутался, если я использую только 2 строки соединения с пулом соединений, то почему мы видим так много спящих соединений, я думаю, что это должно быть только 2? Может ли кто-нибудь помочь мне в этой ситуации и подсказать, что правильно? И как мы можем свести к минимуму сеансы сна.
Также не уверен, что это ошибка пула приложений(IIS server) или ошибка приложения?
Пожалуйста помочь.

Спасибо,

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

Я также попытался проверить сервер приложений IIS 7. Я заметил, что по мере увеличения соединения приложение становится медленным, и нам нужно сделать рециркуляцию пула приложений.
Не уверен в точной причине, почему sp_who2 показывает несколько сеансов сна, если я использую только 2 пула, то сеанс сна должен быть 2, хотя я думаю, что не уверен.

Richard Deeming

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

Вместо этого вы должны создать объект соединения в точке, когда он вам нужен, и обернуть его в using блок. Пул соединений позаботится о повторном использовании закрытых соединений для вас.

using (SqlConnection connection = new SqlConnection("..."))
{
    ... Code that uses the connection here ...
}

1 Ответов

Рейтинг:
0

Gerry Schmitz

Почему бы вам не посмотреть, есть ли связь между вашими "открытиями" и "спящими сессиями".

Цитата:
В моем приложении мы открываем и закрываем соединение везде и всюду как показано ниже


Может быть, вам нужен лучший шаблон / заводской метод, чтобы вы могли отслеживать все "Открытие и закрытие везде".