У нас есть запрос, выполнение которого занимает от 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 или именованные каналы.
Ваш запрос по-прежнему выполняется так же медленно?
Кроме того, при удаленном подключении начальное соединение медленно устанавливается? Я думаю, что это может быть аутентификация.
Мое ожидание было бы одним из следующих:
Нажмите кнопку на панели инструментов в окне запроса «Включить статистику клиента» и посмотрите, что возвращается после выполнения запроса. Вы можете увидеть, сколько байтов было получено с сервера, время выполнения и т. Д.
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