Linq-to-sql и sp_reset_connection

У меня есть WinForm .NET 4.0 WinForm и служба Windows .NET 4.0, которые оба подключаются к базе данных SQL 2005/2008 через Linq к SQL. Он работает приятно и быстро в нашей тестовой среде с идеальным клоном производственных данных, но в производственной среде он работает действительно медленно и имеет низкое использование процессора и использование пропускной способности. Я также заметил сотни SQL Timeouts в день, даже для самых маленьких запросов в хорошо проиндексированной базе данных. Поэтому я выпустил профилировщик ...

Я обнаружил, что SP_RESET_CONNECTION составлял одну треть всего общего объема процессора CQL и 90% всех общих вызовов SQL во время 10-минутного захвата под загрузкой.

  • Я попробовал отключение и включение объединения соединения и возобновить количество разрешенных соединений и тайм-аута соединения в строке подключения. У одного не было никакого эффекта.
  • Я заменял мои запросы LINQ с помощью запросов ADO.NET, когда я сталкиваюсь с ними. Эти старые запросы ADO.NET никогда не выходят. Только LINQ.
  • Я заметил другие основные проблемы с производительностью на этом сервере, но я не уверен, как приблизиться к объекту с Sysadmin клиента.
  • У меня есть доступ администратора на сервере приложений, на котором работает сервис. У меня нет доступа к серверу терминалов, где они запускают WinForm, ни на SQL Server.

  • Что вызывает SP_RESET_CONNECTION Для запуска так часто?

  • Есть ли способ обойти эти звонки, не разрывая все LINQ из моего приложения?
  • Есть ли способ уменьшить количество вызовов к этой сохраненной процедуре?
  • Есть ли способ уменьшить количество времени процессора, необходимое для этих вызовов SQL Server для этих вызовов?
  • Я буду связывать что-нибудь еще, если Я оставляю объединение инвалидов и заменил, что хранится, скажем, пустой?
5
задан tsilb 16 September 2011 в 07:22
поделиться