.NET для удаленного SQL Server медленно на одном компьютере, а не на другом - PullRequest
2 голосов
/ 24 октября 2011

Я занимаюсь разработкой приложения .NET 4.0 на недавно настроенном рабочем столе Windows 7.Запросы к удаленной базе данных в этом приложении выполняются крайне медленно.Это же приложение работает довольно быстро на моем ноутбуке, которое я использовал до сих пор.Рабочий стол, который я сейчас использую, работает намного быстрее, чем ноутбук.Я использую VPN-соединение для подключения к удаленному серверу БД (так же, как на ноутбуке).Это медленно и в IIS, и в Cassini.

Я должен добавить, что приложение использует Entity Framework для доступа к данным.

Кто-нибудь знает, в чем может быть проблема?

ОБНОВЛЕНИЕ 1: ОК, это действительно странно.Я посмотрел на запросы в SQL Server Profiler на ноутбуке и настольном компьютере.Они оба одинаковы.Но на моем рабочем столе запросы выполняются все дольше и дольше.Поэтому я запустил Management Studio на рабочем столе и выполнил запрос, полученный из SQL Server Profiler.Это бежало очень быстро (менее чем за секунду).Но когда я выполнил это снова, это заняло 1 секунду.Затем 2 секунды, затем 4 (см. Образец?).Я не могу на всю жизнь понять, что может быть причиной этого.Вот запрос:

    select top (2) [Extent1].[RequestID] AS [RequestID], 
[Extent1].[RequestDate] AS [RequestDate], 
[Extent1].[RequestTitle] AS [RequestTitle], 
[Extent1].[RequestTypeID1] AS [RequestTypeID1], 
[Extent1].[RequestTypeID2] AS [RequestTypeID2], 
[Extent1].[SubjectMatterID1] AS [SubjectMatterID1], 
[Extent1].[SubjectMatterID2] AS [SubjectMatterID2], 
[Extent1].[ProviderID] AS [ProviderID], 
[Extent1].[Description] AS [Description], 
[Extent1].[Notes] AS [Notes], 
[Extent1].[RequestedBy] AS [RequestedBy], 
[Extent1].[OrganisationID] AS [OrganisationID], 
[Extent1].[ProgramID] AS [ProgramID], 
[Extent1].[StatusID] AS [StatusID], 
[Extent1].[MethodID] AS [MethodID], 
[Extent1].[StaffID] AS [StaffID], 
[Extent1].[TopicID] AS [TopicID], 
[Extent1].[RequestCreatedBy] AS [RequestCreatedBy], 
[Extent1].[RequestCreatedOn] AS [RequestCreatedOn], 
[Extent1].[RequestModifiedBy] AS [RequestModifiedBy], 
[Extent1].[RequestModifiedOn] AS [RequestModifiedOn], 
[Extent1].[RequestedByExtraID] AS [RequestedByExtraID]
FROM [dbo].[Request] AS [Extent1]

Но подождите!Это становится страннее!Следующий запрос всегда занимает одинаковое количество времени (менее секунды), независимо от того, как часто я его выполняю:

select top (2) * From request

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

ОБНОВЛЕНИЕ 2 Если я "Включить план фактического выполнения" в Management Studio, запрос всегда очень быстрыйнезависимо от того, как часто я выполняю это.

Ответы [ 4 ]

3 голосов
/ 28 октября 2011

Наконец, после нескольких дней попыток всех видов различных настроек и даже переустановки всего (включая Windows) с нуля, я как-то разобрался в проблеме. Это были - и я до сих пор не могу в это поверить - настройки сетевой карты. Я отключил «Разгрузку контрольной суммы IPv4», «Разгрузку большой отправки (IPv4)», «Разгрузку контрольной суммы TCP (IPv4)» и «Разгрузку контрольной суммы UDP (IPv4)». Теперь все хорошо и быстро ...

0 голосов
/ 22 ноября 2014

То же самое случилось со мной, и я потратил несколько дней, пытаясь понять это. Запросы из Entity Framework и ADO.NET к удаленному SQL Server с моей рабочей станции будут выполняться очень медленно, но быстро на всех станциях других разработчиков. Отключение Large Send Offload V2 (IPv4) немедленно решило проблему.

0 голосов
/ 24 октября 2011

Запустите трассировку на сервере БД и посмотрите, какие фактические операторы SQL фактически выполняются для него.У меня есть ощущение, что ваш EF генерирует diff SQL, чем то, что вы имеете в студии управления.Возможно, вам придется оптимизировать его.VPN-соединение также может быть частью проблемы.

0 голосов
/ 24 октября 2011

Ну, я испытал нечто подобное в нашем приложении. Помните, что результаты ManagementStudio могут привести к неверным выводам. При подключении есть параметр ARITHABORT, который по умолчанию установлен на ON в MS, но в вашем приложении он всегда выключен по умолчанию.

Ссылки

SQL Server ARITHABORT

https://stackoverflow.com/questions/2465887/why-would-set-arithabort-on-dramatically-speed-up-a-query

...