Назад | Перейти на главную страницу

Запросы выполняются очень быстро локально и очень медленно на удаленных машинах.

У нас есть запрос, выполнение которого занимает от 24 до 38 секунд, когда вы запускаете его из SQL Server Management Studio с удаленного компьютера, но <1 секунды для выполнения, когда он запускается с компьютера локально с помощью SQL Server Management Studio.

SQL Server 2005 Windows Server 2003 R2 Standard Edition, виртуализированный на VMWare 3.5.0 с 4 ГБ оперативной памяти и одним процессором.

Я также добавлю, что тот же запрос медленно выполняется и из приложений, а не только из SQL Mgmt Studio.

Есть идеи, почему он может работать очень быстро локально, но очень медленно на удаленных машинах?

Изменить: обрабатывает ли SQL Server кеширование результатов по-разному? Я спрашиваю об этом, потому что поставщик, программное обеспечение которого вызывало проблему, добавил индексы в таблицы, которые заставили результаты отображаться быстро удаленно, как они это делали локально. Я использовал SQL Profiler, чтобы посмотреть, сколько времени занимало выполнение запросов, а удаленным определенно требовалось больше времени для выполнения, и теперь кажется, что они занимают такое же время после добавления индексов.

По умолчанию SQL Server подключается с использованием общей памяти при локальном подключении, а затем либо TCP / IP, либо по именованным каналам при удаленном подключении. Чтобы проверить, связано ли это с используемым протоколом, попробуйте подключиться локально, но заставьте его использовать TCP / IP или именованные каналы.

  1. открыть Management Studio
  2. Нажмите Connect-> Database Engine.
  3. Щелкните Параметры
  4. В разделе свойств подключения измените сетевой протокол.

Ваш запрос по-прежнему выполняется так же медленно?

Кроме того, при удаленном подключении начальное соединение медленно устанавливается? Я думаю, что это может быть аутентификация.

Мое ожидание было бы одним из следующих:

  • Возвращается много данных, и требуется столько времени, чтобы данные пересекли провод.
  • Проблема с производительностью удаленного компьютера.

Нажмите кнопку на панели инструментов в окне запроса «Включить статистику клиента» и посмотрите, что возвращается после выполнения запроса. Вы можете увидеть, сколько байтов было получено с сервера, время выполнения и т. Д.

Client Execution Time                                   12:08:38
Query Profile Statistics                                                                        
  Number of INSERT, DELETE and UPDATE statements        0
  Rows affected by INSERT, DELETE, or UPDATE statements 0
  Number of SELECT statements                           3
  Rows returned by SELECT statements                    15
  Number of transactions                                0
Network Statistics                                                                      
  Number of server roundtrips                           3
  TDS packets sent from client                          3
  TDS packets received from server                      7
  Bytes sent from client                                240
  Bytes received from server                            21306
Time Statistics                                                                 
  Client processing time                                31
  Total execution time                                  61093
  Wait time on server replies                           61062

Редактировать:

В вашем комментарии говорится, что он возвращает только 39 строк, поэтому, вероятно, это не передача данных между клиентом и сервером.

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

Какова производительность, когда вы пытаетесь подключиться к машине другим способом, например, удаленным рабочим столом и т. Д.? Если все работает медленно, когда вы пытаетесь подключиться к машине, у вас могут быть проблемы с сетью, такие как сломанная сетевая карта / кабель, проблемы с маршрутизатором / брандмауэром и т. Д. (Я видел пару серверов с 10-мегабитным режимом на гигабитной сетевой карте: D)

Используете ли вы того же пользователя при запуске с локального сервера, что и при работе удаленно? Это учетная запись AD или учетная запись SQL?

Ищите типы ожидания в Sys.dm_os_waiting_tasks

http://technet.microsoft.com/en-us/library/cc966413.aspx