Las agrupaciones de conexiones se restablecen con error: 18056, gravedad: 20, estado: 46. y no se muestran los contadores de rendimiento

21

Estamos utilizando la autenticación de SQL (para reducir el número de grupos de conexiones) y cadenas de conexión .NET 4.0 para conectarse a SQL Server Enterprise Edition 2012 SP1 en un servidor empresarial Windows 2008 R2:

Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64)
19 de octubre de 2012 13:38:57
Copyright (c) Microsoft Corporation
Enterprise Edition (64 bits) en Windows NT 6.1 (Build 7601: Service Pack 1)

Utilizamos alrededor de 50 servidores divididos en 8 grupos diferentes en diferentes partes de un sitio web.

Nuestro sitio web está utilizando este SQL Server para registrar datos de seguimiento de visitas. En los últimos días ha escupido los siguientes mensajes sobre el restablecimiento de los grupos de conexiones:

El cliente no pudo reutilizar una sesión con SPID 1327, que se había restablecido para la agrupación de conexiones. El ID de falla es 46. Este error puede haber sido causado por una falla de operación anterior. Verifique los registros de error para detectar operaciones fallidas inmediatamente antes de este mensaje de error.

El registro de errores lee:

Error: 18056, gravedad: 20, estado: 46.
El cliente no pudo reutilizar una sesión con SPID 959, que se había restablecido para la agrupación de conexiones. El ID de falla es 46. Este error puede haber sido causado por una falla de operación anterior. Verifique los registros de error para detectar operaciones fallidas inmediatamente antes de este mensaje de error.
Error de inicio de sesión para el usuario 'xxxx'. Motivo: no se pudo abrir la base de datos 'xxxxxxxx' configurada en el objeto de inicio de sesión al volver a validar el inicio de sesión en la conexión. [CLIENTE: 10.xx.xx.xxx]

Después de investigar un poco, encontré este documento en el blog de CSS: Cómo funciona: Error 18056: el cliente no pudo reutilizar una sesión con SPID ##, que Aaron Bertrand había reiniciado para la agrupación de conexiones, y Aaron Bertrand: Solución de problemas Error 18456 . Sé que el número de error es diferente, pero la ID de falla es la misma con una cantidad de mensajes idénticos).

El ID de falla 46 sugiere que el inicio de sesión no tenía permisos. Nuestros inicios de sesión predeterminados a la base de datos maestra y el nombre de la base de datos se especifica en la cadena de conexión.

Quería verificar el número de grupos de cadenas de conexión, etc. y verifiqué todos los contadores en Perfmon .Net Data Provider for SqlServer. Solo me dio la opción de defaultdomain9675la instancia, así que seleccioné eso asumiendo que es un nombre de ID generado por el sistema para nuestra red Datacentre. Lamentablemente, todos los contadores están leyendo cero. En uno de nuestros otros servidores principales, los grupos de conexiones rondan los 10, que es lo que esperaba ver en un servidor en buen estado con ese tipo de carga.

Mi pregunta es 3 veces

  1. ¿Alguien puede sugerir por qué no se muestra Windows 2008 R2 Server .Net Data Provider for SqlServer?

  2. ¿Alguien ha experimentado esto ya que obviamente creo que el inicio de sesión sin permisos es una pista falsa?

  3. Si diferentes grupos de servidores web tienen la misma sintaxis de cadena de conexión pero con espacios en blanco ligeramente diferentes, ¿esto causaría que el servidor use otro grupo de conexiones?

La configuración de memoria mínima y máxima es de 20 GB y 58 GB respectivamente. El servidor es un servidor de base de datos dedicado con 64 GB de RAM. No creo que el problema sea la memoria, ya que la caja parece tener una expectativa de página decente. El cierre automático no está habilitado. El servidor siempre está activo: este es un sitio web 24x7 con un uso intensivo.

Bienes dañados
fuente
3
Tenemos este mismo problema en nuestros servidores (aplicación .NET / Windows 2008 R2 / SQL Server 2008 R2 / SQL login) de manera intermitente; Nunca he podido rastrear por qué sucede esto ... básicamente hemos dejado de intentarlo en este momento. También tuvimos este problema en .NET 3.5 antes de actualizar a 4.0. ¡Me encantaría saber si alguien ha resuelto esto!
Jon Seigel
1
@ jonSeigel Hola John, he logrado determinar que el servidor en cuestión está realmente utilizando la agrupación de conexiones correctamente utilizando el siguiente documento sobre eventos extendidos. sqlserverpedia.com/blog/sql-server-bloggers/… actualmente estoy tratando de adaptar los Xevents para encontrar la información necesaria para darme un total de la cantidad de grupos de conexiones
DamagedGoods
¿El servidor en cuestión utiliza la duplicación? He visto este mensaje de error en la máquina principal cuando las bases de datos se conmutan por error a la secundaria.
Max Vernon

Respuestas:

5

1 - no puedo decir con certeza, tendría que ir a buscar un servidor para cavar en mí.

2 - sí, veo esto periódicamente en mi entorno, aunque todavía no estamos en sql 2012 en los sistemas desde los que vemos esto. También puede consultar http://blogs.msdn.com/b/psssql/archive/2013/02/13/breaking-down-18065.aspx aunque el estado 46 parece estar relacionado con tener una base de datos específica = xxx en la cadena de conexión, ¿todavía existe esa base de datos?

La forma en que está configurada mi red sospecho que es el cierre automático de la red de sesiones tcp después de estar 5 minutos inactivo, ese es el problema: ni el db ni el cliente están cerrando la sesión, por lo que el grupo de conexiones todavía piensa que la conexión está abierta e intenta usar solo para descubrir que ya no está realmente abierto. No menciona cómo está configurada la red entre sus servidores web y db, tal vez su caso sea similar.

Otra posibilidad puede ser el problema (antiguo, no estoy seguro si alguna vez se resolvió realmente, consulte http://support.microsoft.com/kb/942861 ) sobre la configuración de descarga de TCP Chimney.

3 - Entiendo que la agrupación requiere coincidencias de cadena exactas, por lo que el espacio en blanco y el orden diferente de los parámetros causarían diferentes agrupaciones. (Si me equivoco en eso, hágamelo saber).

crummel4
fuente
4

Respuesta de Community Wiki originalmente dejada como un comentario por el autor de la pregunta

En mi caso, resultó ser una tabla de registro desbocada que alguien había cambiado a detallada para solucionar un problema, pero se olvidó de apagarla. Terminó registrando hasta 1000 registros por segundo.

Otro trabajo intentaba eliminar registros antiguos de la tabla. terminó en nudos como se estaba bloqueando al intentar eliminar, bloqueando todas esas inserciones que se quedaron sin recursos del grupo de conexiones.

Tan pronto como encontré el trabajo, abofeteé a la persona que abusó de sus derechos en ese servidor y detuve el trabajo, todos los mensajes de error para los grupos de conexiones se detuvieron.

Paul White dice GoFundMonica
fuente