Cómo solucionar problemas de conexiones huérfanas en SQL Server


Resumen


Cuando un cliente de Microsoft SQL Server se desconecta de un servidor de SQL Server, el proceso de conexión debe borrarse en el servidor. Si por algún motivo no se han eliminado los procesos de conexión, se convierten en procesos "huérfanos" o "fantasma". Estos procesos pueden usar recursos valiosos, como bloqueos y conexiones de usuario. Los procesos huérfanos suelen ser causados por el cierre incorrecto de las aplicaciones cliente y los problemas relacionados con la red, y las soluciones suelen requerir la solución de problemas de las aplicaciones cliente y de ajustar las configuraciones de red.

Más información


Cuando solucione este problema, tenga en cuenta lo siguiente:
  • SQL Server como una aplicación no sondea ni debe comprobar proactivamente la conexión del cliente para determinar su estado actual. Las comunicaciones entre procesos (IPC) de bajo nivel, como las canalizaciones con nombre, los sockets IPX/SPX o TCP/IP, son responsables de administrar las conexiones de los clientes.
  • Por lo general, un IPC tiene su propio mecanismo para administrar las conexiones de los clientes. Cuando las conexiones de cliente dejan de responder durante un período de tiempo determinado, normalmente el equipo con Windows NT Server la detectará enviando los sondeos "Keep Alive" o cerrará la conexión cuando esté inactiva durante un período de tiempo configurado. Sin embargo, las aplicaciones no envían de forma predeterminada paquetes "keepalive". La aplicación debe habilitar esta característica en sus conexiones.
  • En determinadas situaciones, como un error de protección general del cliente, el cliente puede seguir respondiendo a las sondas del servidor incluso si la aplicación ya está inactiva. En este caso, el equipo con Windows NT Server puede mantener esta conexión del cliente de forma indefinida, siempre que el cliente no se cierre.
  • Si un equipo con Windows NT Server no cierra una conexión inactiva por algún motivo, SQL Server considera legítimamente que esta conexión aún está activa y, por lo tanto, no la borra.
  • Si el equipo con Windows NT Server cerró correctamente la conexión, pero el proceso del cliente sigue existiendo en SQL Server como indica sp_who, es posible que se deba a un problema con la administración de conexiones de SQL Server. En este caso, debes trabajar con tu proveedor de soporte técnico principal para resolver este problema.
Si sospecha que existen procesos huérfanos en su SQL Server, siga estos pasos para solucionar el problema:
  1. Identifique los procesos huérfanos mediante sp_who, que le indicará qué aplicaciones se asociaron con estos procesos a través de los nombres de host.
  2. Después de identificar estos procesos huérfanos, puede optar por ignorarlos si no mantienen ningún bloqueo o usando muchas conexiones, o bien eliminarlos con el comando KILL de SQL Server.
  3. Consulte a los usuarios de la aplicación los procedimientos incorrectos para cerrar las aplicaciones, como el reinicio cálido o frío de las estaciones de trabajo sin salir primero de las aplicaciones. Compruebe si hay algún historial de la estación de trabajo que sea inestable, como un error de protección general, etc. Solucione los procedimientos incorrectos o los problemas de estabilidad si existen.
  4. Compruebe si la sesión de IPC aún está activa en el equipo con Windows NT Server en el que se está ejecutando SQL Server. Según el IPC que use, los comandos son diferentes. Por ejemplo, si usa canalizaciones con nombre, el comando es "NET SESSION" o "NET FILEs"; Si se trata de una conexión de Sockets TCP/IP, puede usar "NETSTAT" para mostrar las sesiones de TCP activas; en el caso de IPX/SPX, es posible que tenga que usar el monitor de rendimiento para supervisar las "conexiones abiertas" de "NWLink SPX".
  5. Si las sesiones de IPC aún están activas en el equipo con Windows NT Server, es totalmente normal que SQL Server mantenga esos procesos de conexión. Cuando Windows NT borre las sesiones de IPC, se notificará a SQL Server y se eliminarán los procesos de conexión en consecuencia. Es posible que pueda ajustar determinados parámetros de red de Windows NT para acortar el período de tiempo que Windows NT debe esperar antes de borrar las sesiones inactivas. De nuevo, según el IPC que use, los parámetros implicados son muy diferentes.Para obtener más información, haga clic en el número de artículo siguiente cómo modificar esta configuración del registro para que coincida con la información que se menciona a continuación para ver el artículo Cómo modificar esta configuración del registro para que coincida con los elementos que se mencionan a continuación en Microsoft Knowledge Base:
    120642 Parámetros de configuración de TCP/IP y NetBT para Windows 2000 o Windows NT
    99745 Ajustar los parámetros del registro de NWLINK
    • Canalizaciones con nombre: las canalizaciones con nombre se implementan en el nivel SMB (bloque de mensajes de servidor) sobre otros protocolos de transporte, como TCP/IP, NetBEUI o NWLink IPX/SPX. Una capa delgada denominada NetBIOS suele implementarse entre el SMB y el nivel de transporte. Por lo tanto, una forma cómoda de ajustar el tiempo que una sesión de canalizaciones con nombre no responde debe esperar antes de cerrarse mediante el ajuste de los parámetros de KeepAlive de la capa NetBIOS correspondiente. Para TCP/IP, la capa NetBIOS implicada es NBT (NetBIOS sobre TCP) y el parámetro implicado es SessionKeepAlive en la siguiente clave del registro:
               KEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netbt\Parameters      
      Si el protocolo utilizado es NWlink IPX/SPX, los parámetros implicados son KeepAliveCount y KeepAliveTimeout en la siguiente clave del registro:
               HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NWNBLink\Parameters      
      Tenga en cuenta que algunas implementaciones de canalizaciones con nombre sobre NWLink pueden eludir la capa NetBIOS (DirectHosting), lo que significa que no se aplican los parámetros NetBIOS anteriores NWNBlink.
    • Sockets TCP/IP: Windows NT Server enviará periódicamente "paquetes de mantenimiento de la actividad a los clientes, y se espera que los clientes respondan. Si por algún motivo el cliente no responde a esos paquetes, Windows NT borra la sesión TCP después de intentar un número de veces configurado. Los parámetros implicados son KeepAliveInterval, KeepAliveTime y TcpMaxDataRetransmissions en la siguiente clave del registro:
               HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters      
    • IPX/SPX: de forma similar a TCP/IP, Windows NT Server envía periódicamente paquetes "Keep Alive" y los clientes responden. Windows NT desactiva las conexiones SPX si no recibe ninguna respuesta después de enviar un número configurado de paquetes "Keep Alive". Los parámetros implicados son KeepAliveCount y KeepAliveTimeout en la siguiente clave del registro:
               HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NWLnkSPX\Parametes      
    Tenga en cuenta que si los parámetros de "mantenimiento de la actividad" de sus IPC están configurados para no agotar el tiempo de espera, Windows NT mantendrá las sesiones de IPC indefinidamente, incluso si los clientes se han apagado por completo. En este caso, SQL Server también mantendrá indefinidamente estos procesos de cliente, lo que se espera. Para obtener más información sobre los parámetros, consulte la documentación de Windows NT o el kit de recursos de Windows NT. Si sospecha que el equipo con Windows NT Server no elimina las sesiones según los parámetros de configuración, puede ponerse en contacto con el proveedor principal de soporte técnico de Windows NT para obtener ayuda.
  6. Si la sesión IPC ya no existe en el equipo Windows NT Server, pero SQL Server sigue conservando el proceso del cliente como se muestra en sp_who, puede usar el comando KILL para borrar el proceso como solución temporal y ponerse en contacto con el proveedor principal de soporte técnico de SQL Server para obtener más ayuda.
Para obtener más información sobre este tema en relación con SQL Server 2000, consulte el tema "sesiones huérfanas" en los libros en línea de SQL Server.