Устранение проблем с потерянными соединениями в SQL Server


Аннотация


Когда клиент Microsoft SQL Server отключается от сервера SQL Server, процесс подключения должен быть очищен на стороне сервера. Если по какой – либо причине процесс соединения не будет устранен, они преобразуются в "потерянные" или "фантомные" процессы. Эти процессы могут использовать ценные ресурсы, такие как блокировки и соединения пользователей. Потерянные процессы обычно возникают из-за неправильного закрытия клиентских приложений и проблем, связанных с работой сети, а также для устранения неполадок, которые обычно требуют проблемные приложения клиента и тонкой настройки сетевых конфигураций.

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


При устранении этой проблемы имейте в виду следующее:
  • Приложение SQL Server в качестве приложения не предназначено для упреждающего проверки клиентского соединения, чтобы определить его текущее состояние. На уровне межпроцессного взаимодействия (IPCs), например именованных каналов, IPX/SPX или TCP/IP, лежит ответственность за управление подключениями клиентов.
  • У IPC обычно есть собственный механизм управления подключениями клиентов. Когда клиентские соединения становятся неактивными в течение определенного времени, обычно компьютер с операционной системой Windows NT Server обнаружит это, отправив зонды проверки активности, или отмените подключение после его бездействия в течение заданного промежутка времени. Тем не менее, пакеты поддержания активности не отправляются приложением по умолчанию. Приложению необходимо включить эту функцию для своих подключений.
  • В некоторых ситуациях, таких как клиентская аппаратная ошибка защиты, клиент может по-прежнему отвечать на серверные зонды, даже если приложение уже неактивно. В этом случае компьютер под управлением Windows NT Server может поддерживать это клиентское подключение неограниченное время, если клиент не завершает работу.
  • Если компьютер под управлением Windows NT Server не закрывает неиспользуемое подключение по какой-либо причине, SQL Server по законам считает это подключение активным, поэтому не очищает его.
  • Если компьютер с операционной системой Windows NT Server успешно закрыл соединение, но клиентский процесс по-прежнему существует на сервере SQL Server, как указано sp_who, это может означать проблему с управлением подключением SQL Server. В этом случае для устранения этой проблемы следует работать с основным поставщиком услуг технической поддержки.
Если вы подозреваете, что на сервере SQL Server есть потерянные процессы, выполните описанные ниже действия, чтобы устранить проблему.
  1. Определите потерянные процессы с помощью sp_who, которые могут сообщить вам о том, какие приложения были связаны с этими процессами с помощью имен узлов.
  2. После того как вы обнаружите эти потерянные процессы, вы можете проигнорировать их, если они не удерживает ни одной блокировки, ни использовать большое количество подключений, либо закрыть их с помощью команды SQL Server KILL.
  3. Узнайте у пользователей приложения, есть ли неправильные процедуры закрытия приложений, например горячий или холодный перезапуск рабочих станций, не выходя из приложения. Убедитесь, что журнал рабочей станции работает нестабильно, например общая ошибка защиты и т. д. Исправьте эти неправильные процедуры или проблемы со стабильностьм, если они существуют.
  4. Убедитесь, что сеанс IPC по-прежнему активен на компьютере с Windows NT Server, на котором запущен SQL Server. В зависимости от используемой IPCs команды различаются. Например, если вы используете именованные каналы, команда имеет значение "сетевой сеанс" или "сетевые файлы"; Если это соединение сокетов TCP/IP, вы можете использовать "NETSTAT" для отображения активных сеансов TCP; в случае использования протоколов IPX/SPX может потребоваться наблюдать за тем, как отключаться открытые подключения для "NWLink SPX" с помощью системного монитора.
  5. Если сеансы IPC по-прежнему активны на компьютере с операционной системой Windows NT Server, они вполне обычно предназначены для того, чтобы SQL Server сохранил эти процессы подключения. Когда система Windows NT удаляет сеансы IPC, SQL Server получит уведомление и будет соответствующим образом удалить процесс подключения. Вы можете настроить определенные сетевые параметры Windows NT так, чтобы сократить период времени, в течение которого Windows NT может подождать, пока сеансы не будут очищены. В зависимости от того, какой IPCs вы используете, эти параметры очень различны.Чтобы получить дополнительные сведения, щелкните приведенную ниже статью, чтобы узнать, как изменить эти параметры реестра в соответствии с упомянутыми ниже инструкциями, чтобы просмотреть, как изменить эти параметры реестра в соответствии с упомянутыми ниже разделами Microsoft Knowledge Base.
    120642 Параметры конфигурации TCP/IP и NetBT для Windows 2000 и Windows NT
    99745 Настройка параметров реестра NWLINK
    • Именованные каналы: именованные каналы реализованы на уровне SMB (Server Message Block) поверх других протоколов транспорта, таких как TCP/IP, NetBEUI или NWLink IPX/SPX. Тонкий слой, именуемый NetBIOS, обычно реализуется между протоколом SMB и транспортным уровнем. Таким образом, вы можете настроить параметры проверки активности для нужного уровня NetBIOS, чтобы время, в течение которого сеансы именованных каналов не отвечал ожиданиям, не закрылся. Для протокола TCP/IP включен слой NetBIOS: NBT (NetBIOS через TCP), а параметр SessionKeepAlive в следующем разделе реестра.
               KEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netbt\Parameters      
      Если используется протокол NWlink IPX/SPX, используются параметры KeepAliveCount и KeepAliveTimeout в следующем разделе реестра:
               HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NWNBLink\Parameters      
      Обратите внимание, что некоторые реализации именованных каналов по протоколу NWLink могут обойти уровень NetBIOS (DirectHosting), что означает, что указанные выше параметры NWNBlink NetBIOS не применяются.
    • Сокеты TCP/IP: Windows NT Server будет периодически отправлять клиентам пакеты проверки активности, а клиенты должны отвечать на запросы. Если по какой-либо причине клиент не ответил на эти пакеты, система Windows NT удаляет сеанс TCP после того, как вы закончите указанное количество попыток. В следующем разделе реестра указаны параметры KeepAliveInterval, KeepAliveTime и TcpMaxDataRetransmissions.
               HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters      
    • Протокол IPX/SPX: аналогичен протоколу TCP/IP, Windows NT Server периодически отправляет пакеты "Keep Alive" и отвечает на запросы клиентов. Windows NT удаляет подключения по протоколу SPX, если не удается получить ответы после отправки настроенного количества пакетов проверки активности. В следующем разделе реестра указаны параметры KeepAliveCount и KeepAliveTimeout:
               HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NWLnkSPX\Parametes      
    Обратите внимание на то, что если параметры проверки активности для вашего IPCs настроены на бессрочное время, Windows NT будет хранить неограниченные сеансы IPC, даже если клиенты полностью закрыты. В этом случае SQL Server сохранит эти клиентские процессы неопределенной точно, а это ожидается. Для получения дополнительных сведений о параметрах ознакомьтесь с документацией по Windows NT или Windows NT Resource Kit. Если вы подозреваете, что на компьютере с Windows NT Server эти сеансы не удаляются в соответствии с параметрами конфигурации, вы можете обратиться за помощью к основной службе поддержки Windows NT.
  6. Если сеанс IPC больше не существует на компьютере с Windows NT Server, но SQL Server по-прежнему хранит клиентский процесс, который отображается sp_who, можно использовать команду KILL, чтобы удалить процесс как временное решение, и обратиться за помощью к основному поставщику поддержки SQL Server.
Дополнительные сведения об этой теме, связанной с сервером SQL Server 2000, можно найти в разделе "потерянные сеансы" в книге SQL Server Books Online.