SQL CPU High - SqlConnection не закрывается - связано? - PullRequest
2 голосов
/ 27 января 2011

У меня есть приложение на основе ASP.net.

ЦП на блоке SQL Server постоянно ~ 90 - 100%

Есть много неэффективных запросов, над которыми я сейчас работаю, однако, глядя на код предыдущего кодера, он никогда не закрывал (или не удалял) SqlConnection

Когда я запускаю следующий запрос, я получаю около 450 соединений, которые «ожидают команды»

ВЫБРАТЬ Счетчик (*) ОТ MASTER.DBO.SYSPROCESSES WHERE DB_NAME (DBID) = 'CroCMS' И DBID! = 0 AND cmd = 'AWAITING COMMAND'

Это может быть причиной проблемы?

Я прочитал это, и, похоже, это связано: http://www.pythian.com/news/1270/sql-server-understanding-and-controlling-connection-pooling-fragmentation/

Мы также получаем много тайм-аутов, особенно когда включена репликация. Я не уверен, если это связано .. Отключили репликацию (транзакционный) на данный момент, и, кажется, нормально .. (Этот сервер является подписчиком нашего сервера баз данных в офисе)

Поможет ли удаление объекта соединения SQL?

Ответы [ 2 ]

2 голосов
/ 27 января 2011

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

  • Исправление утверждений.
  • Проверьте приложение на то, что оно использует только одно соединение на ЗАПРОС (т.е. не открывает несколько одновременно).1007 *

    Если проблема не улучшится после оптимизации SQL - вы можете вернуться к пулу.

1 голос
/ 27 января 2011

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

Легко использовать использование статистики.

using (
                var sqlCommand = new SqlCommand(
                    "storedprocname",
                    new SqlConnection("connectionstring"))
                    { CommandType = CommandType.StoredProcedure })
            {
          // do what you should.. setting params executing etc etc. 

}
...