Поделиться через


Устранение периодических или периодических проблем с подключением к SQL Server

Примечание.

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

Стабильность сети необходима для плавной работы различных служб и приложений. Однако возникают случаи, когда проблемы с сетью нарушают эту стабильность. Эта статья поможет вам понять и устранить периодические проблемы с сетью и их типичные сообщения об ошибках. Эти проблемы могут быть разочарованы, но их можно решить более эффективно с помощью лучшего понимания и надлежащего устранения неполадок.

Наиболее распространенные сообщения об ошибках

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

  • Сбой канала связи. Эта ошибка означает нарушение связи между сетевыми компонентами.
  • Истек срок ожидания подключения: время ожидания подключения к серверу истекло, предлагая задержку или недоступность сервера.
  • Общая сетевая ошибка: общее сообщение об ошибке сети часто указывает на неопределенную проблему с сетью.
  • Ошибка уровня транспорта: эта ошибка возникает на транспортном уровне, предлагая проблемы с передачей данных.
  • Указанное имя сети больше недоступно: это сообщение означает, что указанный сетевой ресурс не может быть достигнут.
  • Время ожидания Семафора: эта ошибка указывает на условие времени ожидания, связанное с использованием семафоров в сети.
  • Время ожидания: операция ожидания превысила допустимое время, как правило, из-за задержек сети.
  • Неустранимая ошибка при чтении входного потока из сети: это сообщение свидетельствует о критической ошибке при чтении данных из сети.
  • Ошибка протокола в потоке TDS: табличный поток данных (TDS) — это протокол, используемый SQL Server. Эта ошибка указывает на проблему с протоколом.
  • Сервер не найден или недоступен: это сообщение об ошибке предполагает, что сервер, к которому вы пытаетесь получить доступ, недоступен или не найден.
  • SQL Server не существует или запрещен доступ. Эта ошибка может указывать на отсутствие SQL Server или ошибку проверки подлинности при попытке доступа к SQL Server.

Причина

Наиболее распространенные проблемы связаны с удалением пакетов из-за антивирусной программы, оптимизации сети, старых сетевых драйверов, плохих маршрутизаторов или коммутаторов и неуклюжных подключений в приложении.

Некоторые причины, такие как антивирусная программа, может быть трудно доказать, но по-прежнему распространены. Возможно, вам придется удалить и перезагрузить компьютер, чтобы доказать это, без четких доказательств. Кроме того, может работать создание исключения для SQL Server. Но отключение антивирусной программы обычно не работает, так как драйверы сетевого фильтра по-прежнему загружаются, даже если они не отслеживаются.

Процесс устранения неполадок

Примечание.

Этот процесс предназначен для подключений клиента и сервера SQL Server. Другие сообщения, такие как зеркальное отображение SQL Server, Always-On и трафик синхронизации Service Broker через порт 5022, не рассматриваются.

Как правило, устранение неполадок должно быть управляемым данными, что может дать возможность эмпирическим тестам в более ориентированном контексте. Если проблема очень прерывиста, а трассировки сети будет трудно записать, эмпирические методы могут быть применены сначала.

Сбор отчета с помощью SQLCHECK на каждом компьютере

Запустите SQLCHECK на каждом компьютере, чтобы создать отчет. Полезно определить, почему подключение может завершиться ошибкой.

Сбор трассировок сети на клиенте и сервере

  • На компьютерах Windows соберите трассировки сети с помощью SQLTRACE.

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

    1. Скачайте последнюю версию SQLTRACE и распакуйте ее в папку, например C:\MSDATA.

    2. Откройте файл SQLTrace.ini и отключите следующие параметры:

      BIDTrace=no, AuthTrace=no и EventViewer=no

    3. Сохраните файл.

    4. Откройте PowerShell от имени администратора и измените каталог на папку, содержащую SQLTrace.ps1.

      CD C:\MSDATA
      
    5. Запустите коллекцию трассировки.

      .\SQLTrace.ps1 -start
      
    6. Воспроизводит проблему или дождитесь возникновения ошибки.

    7. Остановите трассировку.

      .\SQLTrace.ps1 -stop
      

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

  • На компьютерах, отличных от Windows, используйте TCPDUMP или WireShark для сбора записи пакетов.

Запуск сетевого анализатора SQL Server

Пользовательский интерфейс сетевого анализатора SQL (SQLNAUI) предоставляет графический интерфейс для выбора файлов трассировки для анализа и настройки параметров. Скачайте его из сетевого анализатора SQL (SQLNA).

Обработка трассировок клиента и сервера отдельно. Если вы создали цепочку трассировок, обработайте их одновременно. Общий размер этих файлов не должен превышать 80 % памяти компьютера. Убедитесь, что у вас достаточно памяти для обработки всех связанных файлов трассировки.

Это средство создаст отчет о подозрительных проблемах и CSV-файле, который можно изучить в Excel для альтернативных исследований.

Попробуйте найти соответствующие беседы в трассировке клиента и трассировке сервера. Как правило, IP-адреса и номера портов соответствуют. Однако если подключения проходят через любой вид преобразования сетевых адресов или сопоставления портов, это может быть сложнее, и вам может потребоваться выстраивать идентификаторы пакетов IPV4 и сравнивать полезные данные.

Шаблоны для поиска в анализе сетевой трассировки

Узнайте, как заканчиваются беседы в NETMON или WireShark. Проверьте, согласен ли клиент и сервер с той же вещью, или если они говорят другую историю.

Подключение закрыто во время подтверждения SSL

В пакете ServerHello, если используемый набор шифров является набором Diffie-Hellman, и трафик находится между Windows 2012 или более ранней версией и Windows 2016 или более поздней версии, этот алгоритм изменяется, начиная с исправлений безопасности Windows 2016. Вы должны отключить эту группу наборов шифров. Дополнительные сведения см. в разделе В приложениях возникают ошибки принудительного разрыва TLS-подключения при подключении серверов SQL в Windows.

Если подключение закрыто после ClientHello, проверьте, есть ли несоответствие TLS 1.0 или TLS 1.2 между клиентом и сервером. Если они одинаковы, проверьте наборы шифров с включенными и включенными хэшами на обоих компьютерах.

Дополнительные сведения см. в разделе "Расширенный сбор данных уровня безопасных сокетов".

Отброшенные пакеты

Просмотрите конец сопоставленных бесед. Если один из них содержит множество повторно передаваемых пакетов (или 10 пакетов с сохранением активности, 1-секундное отдельно), за которым следует ACK+RESET, а другой — нет, или один сообщает о своевременном ответе, а другой видит, что он отложен и закрывает или сбрасывает беседу, это означает, что проблема с сетевым устройством и пакетами удаляется или задерживается.

Также может появиться клиентский отчет, указывающий, что сервер сбрасывает беседу, а серверный отчет указывает, что клиент сбрасывает беседу. Это связано с плохим коммутатором или маршрутизатором, закрывающим подключение с середины, и иногда они могут быть настроены для этого, если они обнаруживают, что подключение неактивно в течение некоторого времени - часто игнорирует пакеты Keep-Alive.

Дополнительные сведения об удаленных подключениях см. в следующем разделе:

Трассировка сервера и трассировка клиента согласны с тем, что проблема связана с клиентом

Если обе трассировки показывают задержку или нет ответа на клиенте, или если клиент выдает ACK+RESET после подтверждения ответа сервера или в противном случае закрывает подключение рано во время последовательности входа, необходимо принять трассировку BID и трассировку NETSH на клиенте, чтобы просмотреть стек TCP/IP и то, что драйвер думает. Обычно это происходит, если антивирусная программа или другие драйверы сетевого фильтра задерживают получение пакета или отправляют ответ. Время ожидания подключения также может быть вызвано медленным ответом DNS или медленным API безопасности, который был вызван до отправки первоначального пакета SYN через провод.

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

Если клиент имеет длинную задержку перед отправкой пакета SYN, вы можете увидеть шаблон, показывающий только подтверждение открытия TCP 3-способом, следовать немедленно или иногда после отправки пакета PreLogin, ACK+FIN, исходя из клиента.

Сбор трассировки сети и трассировки BID для изоляции проблем клиента в Windows
  1. Откройте файл SQLTrace.ini и включите следующие параметры:

    BIDTrace=Yes, AuthTrace=Yes и EventViewer=Yes

  2. BIDProviderList Настройте SQLTrace.ini для сопоставления драйвера, используемого приложением.

    .NET System.Data.SqlClient включен по умолчанию. Если это не драйвер, который вы используете, отключите, добавив BIDProviderList # в передней части строки и удалите его из списка ODBC или OLEDB. При этом будут записаны все поддерживаемые драйверы этого типа. Дополнительные сведения см. в разделе "Конфигурация INI".

  3. Сохраните файл.

  4. Откройте PowerShell от имени администратора и измените каталог на папку, содержащую SQLTrace.ps1.

    CD C:\MSDATA
    
  5. Инициализирует реестр трассировки BID, если собирается трассировка BID.

    Примечание.

    Трассировка BID включена по умолчанию.

    .\SQLTrace.ps1 -setup
    
  6. Перезапустите службу или приложение, которое выполняется трассировка.

    Для некоторых приложений, таких как пакеты СЛУЖБ SQL Server Integration Services (SSIS), новый экземпляр DTEXEC или ISServerExec запускается при запуске пакета, поэтому перезапуск не имеет смысла.

  7. Запустите коллекцию трассировки.

    .\SQLTrace.ps1 -start
    
  8. Воспроизводит проблему или дождитесь возникновения ошибки.

  9. Остановите трассировку.

    .\SQLTrace.ps1 -stop
    

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

Сведения о трассировки других драйверов Microsoft SQL Server см. в следующих статьях. Выполнение с помощью сетевой трассировки.

Сведения о трассировки сторонних драйверов см. в документации поставщика.

Трассировка сервера и трассировка клиента согласуются с проблемой на сервере.

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

Наиболее вероятными причинами являются низкая производительность сервера, высокий уровень MAXDOP и большие параллельные запросы и блокировки. Это может привести к нехватке потока, предотвращая обработку запроса на вход быстро, особенно если время ожидания подключения заканчивается одновременно, а столбец LoginAck отображает "Поздно". В файле ERRORLOG SQL Server могут отображаться операции ввода-вывода, которые занимают более 15 секунд, что является еще одним индикатором проблем с производительностью. В трассировке сети в отчете сброса может появиться много бесед с шестью кадрами или меньше, что указывает, что подтверждение TCP 3-го способа может не быть завершено. Дополнительные сведения см. в разделе "Сбор буфера кольца подключения".

RingBufferConnectivity Запустите запрос и вставьте результаты в Excel. Так как это исторический список, его можно запустить после возникновения проблемы. Но для занятого сервера он может завершиться быстро. Для медленного сервера он может иметь данные в течение нескольких дней.

Если приложение использует несколько активных результирующих наборов (MARS), оно завершается сбросом в рамках закрывающей последовательности. Это доброкачественно, если пакеты SMP:FIN и ACK+FIN уже отправлены от клиента. Пакет SMP:FIN сервера будет поступать после ACK+FIN от клиента, и Windows выдает ACK+RESET, а затем сброс для любых других ответов сервера в рамках закрывающей последовательности подключения.

Организация пулов соединений

Дополнительные сведения см. в разделе "Пул подключений".

Если используется пул подключений, беседы в трассировке сети обычно будут довольно длинными. Csv-файл, созданный сетевым анализатором SQL Server, можно использовать для сортировки и фильтрации по протоколам и кадрам. Возможно, вы не увидите начальные или конечные кадры, если запись сети меньше, чем полчаса. Если многие беседы короче 30 кадров из пакета SYN в пакет ACK+FIN, это означает, что подключения, не относящиеся к пулу. Если они смешиваются с несколькими более длинными беседами, подозревайте фоновые подключения, не связанные с пулом, вызванные выполнением команд в подключении, отличном от MARS, при чтении результирующий набор.

В отчете о временных портах будет отображаться количество новых подключений в течение времени существования трассировки. Вы можете оценить скорость подключения по количеству подключений в секунду.

RESET vs. ACK+RESET

ACK+RESET обычно отображается, когда приложение или Windows прерывает подключение. Обычно это связано с низкоуровневой ошибкой TCP. Пакет сообщает другому компьютеру немедленно прекратить отправку. Однако если сервер находится в середине передачи, один или два пакета могут прибыть к клиенту после отправки ACK+RESET. Так как порт закрыт, операционная система отправляет пакет RESET. Это также происходит, если пакеты прибывают после пакета ACK+FIN, который не входит в нормальное закрытие подтверждения.

Некоторые сторонние драйверы также отправляют пакет ACK+RESET, чтобы закрыть подключение вместо ACK+FIN. Некоторые подключения пробы также могут сделать это. Если пакет ACK+RESET не предшествует пакетам Keep-Alive, retransmitted packets или Zero Windows packets, и он поступает от клиента, когда ожидается нормальное закрытие ACK+FIN, это может быть доброкачественным.

Использование NETSTAT для анализа проблем с сетью

NETSTAT автоматически собирается при запуске SQLTrace.ps1 для сбора данных.

Кроме того, можно запустить NETSTAT -abon > c:\ports.txt в командной строке от имени администратора, чтобы собирать сведения, связанные с проблемами сети.

Файл ports.txt будет содержать список всех входящих и исходящих портов, номеров портов, идентификаторов процессов и имен приложений, принадлежащих портам. Это можно использовать для просмотра худших правонарушителей и того, достигнут ли предел порта. Включите строку состояния в Блокноте и отключите оболочку Word. Строка состояния даст счетчик строк. Вы можете разделить на два, чтобы получить приблизительное использование портов.

Настройка TcpTimedWaitDelay и MaxUserPort

Если приложение исчерпает исходящие порты на хост-компьютере и вы не можете вносить немедленные изменения в приложение, можно уменьшить TcpTimedWaitDelay от 240 до 30 секунд, что позволяет перезагрузить исходящие порты быстрее.

Для Windows 2003 и более поздних версий можно также увеличить MaxUserPort. Для Windows Vista и более поздних версий NETSH этот параметр устанавливается с помощью команды. Этот курс действий не устраняет неэффективность неустранимых подключений, не относящихся к пулу, или неуклюженных фоновых подключений, и разработчику следует настоятельно рекомендуется изменить свои приложения для использования пула подключений.

Для Windows 2008 и более поздних версий диапазон был увеличен с примерно 4000 временных портов до 16 000 портов по умолчанию.

Дополнительные сведения см. в разделе "Настройка параметров MaxUserPort и TcpTimedWaitDelay".

Почти все пакеты, отправляемые клиентом на сервер или сервер на клиент, реагируют с помощью пакета ACK в противоположном направлении. Слой TCP.SYS создает ACK. Если пакет получен на клиенте, и трассировка клиента показывает, что он поступает, но не ACK возвращается на сервер, это хороший признак того, что антивирусная программа или другой драйвер сетевого фильтра потеряла или сдала пакет или удерживалась на нем в течение длительного времени (после окончания коллекции сетевой трассировки). Аналогичным образом, если трассировка сервера показывает пакет, поступающий из клиента, но ACK не отправляется клиенту, это означает, что антивирусная программа сервера на сервере может иметь проблему.

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

Антивирусная программа и драйверы фильтров очень трудно доказать, как виновный. Эмпирический тест почти всегда требуется. Создайте исключение для приложения или SQL Server в антивирусной программе, а затем отслеживайте его в течение 48 часов, чтобы узнать, улучшается ли поведение. Если исключение не удается установить, удалите антивирусную программу и перезагрузите ее. Отключение обычно не помогает, так как драйвер антивирусной фильтрации по-прежнему загружается. Только это делается в качестве последнего средства, если ваша защита края находится на месте.

Обратитесь к администраторам безопасности сети. Если ситуация улучшается, возможно, потребуется работать с поставщиком антивирусной программы, чтобы устранить проблему. Если это не так, другие драйверы сетевого фильтра могут быть виновными.

Включение аудита брандмауэра Windows

Чтобы определить, удален ли брандмауэр любые пакеты, включите аудит брандмауэра в Windows.

Для SQL Server эта проблема может быть связана с клиентом или серверным компьютером. Трассировка сети покажет, что компьютер получил пакет, но не ответил. Затем пакет может быть повторно переведен, снова получить ответ и в конечном итоге подключение сбрасывается.

Эмпирические и другие действия

Временные порты

Превышение временных портов является относительно распространенной причиной временных истечений времени ожидания подключения, особенно если пакет SYN не отображается в проводной сети.

Для входящих запросов на сервере порты, такие как 80 или 1433, могут принимать до 64 000 входящих подключений на IP-адрес клиента и обычно являются неограниченными для всех практических целей.

С другой стороны, для исходящих подключений количество портов ограничено и совместно используется для всех подключений к серверу. Для Windows Vista, Windows 2008 и более поздних версий диапазон по умолчанию — от порта 49152 до 65535 (2^16 = 16 384 портов).

Как правило, порты хранятся в течение четырех минут (240 секунд) операционной системой до их повторного использования приложениями. Это позволяет предотвратить спуфинирование портов вредоносным программным обеспечением или случайное перенаправление нового подключения к предыдущему владельцу этого порта. Из-за этой задержки в Windows 2003 клиентское приложение может выполнять только 17 подключений в секунду к SQL Server, а диапазон исходящих портов исчерпан менее чем за четыре минуты. Для Windows Vista это число увеличивается до 68 подключений в секунду.

Для таких приложений, как IIS, каждый HTTP-клиент может иметь один исходящий порт в SQL Server. Для занятого веб-сервера выполнение исходящих портов является реальной возможностью при высокой загрузке. Веб-ферма может устранить эту ситуацию.

Настройка максимальной памяти сервера (МБ)

Чтобы устранить проблемы, связанные с низкой памятью ядра, настройте максимальный объем памяти сервера (МБ).

Отключение разгрузки

Для тестирования можно отключить некоторые разгрузки с помощью административной командной строки:

netsh int tcp set global chimney=disabled
netsh int tcp set global rss=disabled
netsh int tcp set global NetDMS=disabled
netsh int tcp set global autotuninglevel=disabled

Не сохраняйте эти параметры отключенными в течение длительного времени, если они не устраняют проблему. Они должны быть включены по умолчанию в Windows 2008 и более поздних версиях.

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

Проблемы с сетевым буфером VMware

Узел ESX, содержащий виртуальную машину, имеет небольшой сетевой буфер, который может вызвать проблемы с надежностью при возникновении всплеска трафика. В следующей статье VMware описывается увеличение размера буфера. Перезагрузка не требуется. Эта операция должна выполняться на хост-компьютере ESX, а не на виртуальной машине.

Потеря большого пакета в гостевой ОС с помощью VMXNET3 в ESXi

Кроме того, попробуйте переместить виртуальные машины на другой сервер узла ESX или переместить клиент и сервер на тот же сервер узла ESX и узнать, исчезнет ли проблема. Если это так, это базовая сетевая проблема.

Моментальные снимки VMware

Проверьте наличие моментальных снимков VMware во время ошибки и отключите их.

Отключение масштабирования на стороне получения (RSS) на хост-компьютере

Если RSS отключен, узел SQL Server использует только один ЦП для обработки всех сетевых запросов. Это может привести к росту ЦП до 100 % и вызвать проблемы, даже если другие ЦП (и общий уровень ЦП) низки.

Дополнительные сведения см. в разделе "Общие сведения о масштабировании на стороне получения и масштабировании на стороне получения" версии 2 (RSSv2).

Дополнительная информация

Периодические или периодические проблемы проверки подлинности в SQL Server

Сбор трассировки сети

Заявление об отказе от ответственности за сведения о продуктах сторонних производителей

В этой статье упомянуты программные продукты независимых производителей. Корпорация Майкрософт не дает никаких гарантий, подразумеваемых и прочих, относительно производительности и надежности этих продуктов.