Доступ к SQL Server медленный на клиентских машинах
Сегодня я был на сайте клиентов и установил некоторое специальное программное обеспечение, которое обращается к базе данных SQL Server 2005, которая находится на сервере на сайте клиентов.
Программное обеспечение работает нормально при запуске непосредственно на сервере, проблема заключается в том, что программное обеспечение запускается на клиентских компьютерах, и все, что связано с доступом к базе данных SQL, приводит к полной остановке ПК на несколько секунд. Загрузка ЦП как на клиентских, так и на серверных машинах низкая, использование памяти на обоих выглядит нормально.
Другие функции на клиентских машинах кажутся достаточно быстрыми, т.е. Интернет, Excel, Word и т. д.
Пользовательское программное обеспечение установлено на нескольких других клиентских сайтах, и скорость доступа SQL не была проблемой, поэтому я на 99% уверен, что это не связано с программным обеспечением. Обоим клиентским компьютерам и серверу уже около 3 - 4 лет, но они имели полный формат и переустанавливались в течение последних 6 месяцев.
Все 3 машины в значительной степени идентичны аппаратно:
Pentium 4 2,66 ГГц
1 ГБ ОЗУ (2 ГБ на сервере)
Windows XP (автоматическое обновление включено, поэтому я предполагаю, что исправления обновлены)
Все подключено к сети 100 МБ
Кто-нибудь знает, что может быть причиной того, что SQL-доступ на клиентском компьютере слишком медленный, или какие инструменты (желательно бесплатные) я могу использовать для диагностики проблемы?
3 ответа
Спасибо постам выше, чтобы помочь мне сузить проблему (у меня нет репутации, чтобы голосовать за них:()
После долгих перестановок с настройками и т. Д. Я просто из любопытства изменил строку подключения к SQL-серверу на клиентских машинах, чтобы ссылаться на сервер по имени хоста и использовать его IP. Это сразу решило проблему, и все работает отлично.
Я предполагаю, что это связано с тем фактом, что "сервер" на самом деле не работает под управлением серверной ОС (это просто другая машина в сети под управлением XP), поэтому нет соответствующего DNS / WINS-сервера для выполнения перевода имени хоста??
В любом случае это работает сейчас, спасибо за помощь.
Возможно, клиенты сначала пытаются подключиться по протоколу, который сервер не прослушивает. Например, клиенты сначала пытаются использовать сетевые каналы через SMB, а когда это происходит, они пытаются использовать TCP (это поведение по умолчанию, кстати). Если сервер не прослушивает netpipes или инфраструктура NetBIOS/SMB на клиенте имеет проблемы, то соединения будут выглядеть очень медленными. Когда вы подключаетесь к серверу, он подключается напрямую к общей памяти и сразу же завершается успешно.
См. Настройка клиентских сетевых протоколов, чтобы узнать, как (глобально) изменить настройки сети на клиентских машинах. Или попробуйте использовать строку подключения, которая обеспечивает соблюдение определенного протокола, например datasource=tcp:hostname,port
, Также проверьте конфигурацию сети сервера, чтобы узнать, какие протоколы сервер активно прослушивает.
Поскольку вы говорите, что процессор и память выглядят хорошо, я бы посмотрел на провод и запросы, которые клиент просит сервер выполнить.
На клиенте я хотел бы сыграть в Wireshark и посмотреть, как выглядит диалог между клиентом и сервером (задержка, повторные передачи и т. Д.). Я не думаю, что я бы ограничил свой разговор только клиентом и сервером, хотя, во время первых нескольких захватов на клиенте, на случай, если клиент отправляет некоторые другие пакеты (ложные запросы разрешения имен, попытки подключиться к другие услуги и т. д.), которые могут дать вам подсказку.
На сервере трассировка SQL Server Profiler может дать вам довольно низкоуровневую информацию о том, что запрашивает клиент и как отвечает сервер. Microsoft предоставляет базовый документ с инструкциями для начала работы.