Compartir a través de


MSSQLSERVER_35267

Se aplica a: SQL Server

Detalles

Attribute Valor
Nombre del producto SQL Server
Id. de evento 35 267
Origen de eventos MSSQLSERVER
Componente SQLEngine
Nombre simbólico HADR_DISCONNECTED_DB
Texto del mensaje Conexión de grupos de disponibilidad AlwaysOn con %S_MSG base de datos terminada para %S_MSG base de datos "%.*ls" en la réplica de disponibilidad "%.*ls" con id. de réplica: {%.8x-%.4x-%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x}. Esto es solo un mensaje informativo. No se requiere ninguna acción del usuario.

Explicación

Este mensaje se produce cuando una réplica de grupo de disponibilidad pierde su conexión a las réplicas remotas en el punto de conexión de creación de reflejo de la base de datos. Estos son ejemplos de cómo puede ver este error:

Always On Availability Groups connection with secondary database terminated for primary database 'ContosoDb' on the availability replica 'PRODSQL' with Replica ID: {xxxxxxxx-xxxx-xxxx-xxxxx-xxxxxxxxxxxx}. This is an informational message only. No user action is required.
Always On Availability Groups connection with primary database terminated for secondary database 'ContosoDb' on the availability replica 'PRODSQL' with Replica ID: {xxxxxxxx-xxxx-xxxx-xxxxx-xxxxxxxxxxxx}. This is an informational message only. No user action is required.

Como puede ver, el error puede aparecer en la réplica principal que indica que perdió la comunicación con la réplica secundaria o viceversa.

El error 35267 suele ser intermitente y puede resolverse el momento en que la causa subyacente se resuelve a sí misma. Por ejemplo, un problema de red intermitente podría resolverse a sí mismo y la conexión podría volver a establecerse.

En muchos casos, es posible que el nodo remoto al que el nodo local intente conectarse no sea consciente del error de conexión. Por lo tanto, es posible que solo vea este error generado en una de las réplicas, no en ambas.

El error 35267 a veces puede producirse junto con el error 35206, que se genera cuando ha transcurrido un período significativo sin una conexión correcta (por ejemplo, más de 10 segundos).

A connection timeout has occurred on a previously established connection to availability replica 'PRODSQL' with id [xxxxxxxx-xxxx-xxxx-xxxxx-xxxxxxxxxxxx].  Either a networking or a firewall issue exists or the availability replica has transitioned to the resolving role.

Always On Availability Groups connection with primary database terminated for secondary database 'ContosoHRDb' on the availability replica 'PRODSQL' with Replica ID: {xxxxxxxx-xxxx-xxxx-xxxxx-xxxxxxxxxxxx}. This is an informational message only. No user action is required.
Always On Availability Groups connection with primary database terminated for secondary database 'ContosoFinDb' on the availability replica 'PRODSQL' with Replica ID: {xxxxxxxx-xxxx-xxxx-xxxxx-xxxxxxxxxxxx}. This is an informational message only. No user action is required.
Always On Availability Groups connection with primary database terminated for secondary database 'ContosoMktngDb' on the availability replica 'PRODSQL' with Replica ID: {xxxxxxxx-xxxx-xxxx-xxxxx-xxxxxxxxxxxx}. This is an informational message only. No user action is required.

La terminación de la conexión del grupo de disponibilidad con la réplica remota puede provocar varios problemas en la réplica local. Por ejemplo, si el grupo de disponibilidad usa el modo SYNCHRONOUS y la conexión se pierde, la réplica local podría terminar esperando confirmación desde el remoto. Como resultado, el registro de transacciones no se trunca y el registro de transacciones se agota el espacio (error MSSQLSERVER_9002) y versiones posteriores para dejar de estar disponible (error MSSQLSERVER_9001). Este es un ejemplo de grupo de errores en los que se produjo esto. El motivo de que el registro de transacciones esté lleno es "AVAILABILITY_REPLICA", lo que significa que esta réplica está esperando al remoto para confirmar que se aplican los registros de registro.

Error: 9002, Severity: 17, State: 9.
The transaction log for database 'ContosoAnalyticsDb' is full due to 'AVAILABILITY_REPLICA'.
Error: 3314, Severity: 21, State: 3.
During undoing of a logged operation in database 'ContosoAnalyticsDb' (page (1:32573799) if any), an error occurred at log record ID (7672713:36228:159). Typically, the specific failure is logged previously as an error in the operating system error log. Restore the database or file from a backup, or repair the database.
State information for database 'ContosoAnalyticsDb' - Hardened Lsn: '(7672713:38265:1)'    Commit LSN: '(7672712:1683087:46)'    Commit Time: 'JuN  10 2022  5:51AM'

Always On Availability Groups connection with secondary database terminated for primary database 'ContosoAnalyticsDb' on the availability replica 'SQL2019DB' with Replica ID: {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}. This is an informational message only. No user action is required.

Database ContosoAnalyticsDb was shutdown due to error 3314 in routine 'XdesRMReadWrite::RollbackToLsn'. Restart for non-snapshot databases will be attempted after all connections to the database are aborted.

Error during rollback. shutting down database (location: 1).
Error: 9001, Severity: 21, State: 5.
The log for database 'ContosoAnalyticsDb' is not available. Check the operating system error log for related error messages. Resolve any errors and restart the database.

Recovery of database 'ContosoAnalyticsDb' (6) is 0% complete (approximately 60177 seconds remain). Phase 2 of 3. This is an informational message only. No user action is required.

Causa

  • Los problemas de conexión de red pueden existir entre las réplicas principal y secundaria
  • Problemas de SQL Server o del sistema operativo en las réplicas principales o secundarias que provocan que los subprocesos no se puedan ejecutar. Algunos ejemplos son:
    • Problemas del programador del sistema operativo SQL (programadores de interbloqueo o sin rendimiento)
    • Memoria baja en la máquina que conduce al recorte del conjunto de trabajo de todos los procesos del sistema, incluido SQL Server
    • Problemas del sistema operativo que provocan que los procesos dejen de responder
  • Problemas de E/S lentos que provocan esperas largas intermitentes en la réplica principal o secundaria

Acción del usuario

La información siguiente describe los escenarios más comunes, pero no es una lista exhaustiva de los pasos de solución de problemas. Las razones específicas para la aparición de este problema pueden incluir una larga lista de posibilidades.

Problemas de conexión

Para comprobar si hay problemas de conexión desde SQL Server en el que se genera el error al servidor SQL Server remoto, puede tener en cuenta los pasos siguientes:

Paso 1. Asegúrese de que el punto de conexión de SQL Server remoto está activo

Ejecute la siguiente consulta para detectar el punto de conexión:

SELECT
 tep.name as EndPointName,
 sp.name As CreatedBy,
 tep.type_desc,
 tep.state_desc,
 tep.port
FROM
 sys.tcp_endpoints tep
INNER JOIN sys.server_principals sp ON tep.principal_id = sp.principal_id
WHERE tep.type = 4

Paso 2. Prueba de la conectividad con el punto de conexión remoto

Use Test-NetConnection para validar la conectividad. Si el punto de conexión está escuchando y la conexión es correcta, busque .TcpTestSucceeded : True Reemplace ServerName o IP_Address por SQL Server remoto y el número de puerto por el del punto de conexión de creación de reflejo de la base de datos.

Test-NetConnection -ComputerName <ServerName> -Port <port_number>
Test-NetConnection -ComputerName <IP_address> -Port <port_number>

Paso 3. Recopilar un seguimiento de red

Los errores de red intermitentes suelen ser difíciles de realizar un seguimiento a menos que capture un seguimiento de red, que muestra los restablecimientos de red (paquetes descartados) o problemas similares. Para obtener más información, consulte 0300 Problema de red intermitente o periódico.

Problemas del programador de SQL Server

Si los subprocesos de trabajo de SQL Server se encuentran en problemas del programador por diversos motivos, los subprocesos que aparecen en las solicitudes entrantes de servicio pueden dejar de responder temporalmente mientras el programador emite el último problema.

Paso 4. Comprobación de problemas del programador en SQL Server

Un problema típico del programador que no produce se registra en el registro de errores de SQL Server después de 70 segundos de estado de no rendimiento. Sin embargo, SQL Server comprueba el estado de los programadores con más frecuencia que ese e informa de los estados intermedios que no producen en eventos extendidos. Si descubre problemas del programador en el nodo remoto que corresponden a la hora del error 35267, céntrese en resolverlos primero. Aquí se muestra cómo puede comprobar si hay repeticiones de corta duración de problemas del programador que no alcanzan el umbral de 70 segundos, pero que se producen por ejemplo 10 o 20 segundos.

Uso del archivo de eventos extendidos de Mantenimiento del sistema

  1. Busque el archivo de eventos extendidos de Mantenimiento del sistema desde el momento del evento.
  2. Haga doble clic en para system_health_0_xxxxxxxxxxxxxxxxxx.xel abrirlo en SQL Server Management Studio (SSMS). Como alternativa, puede usar sys.fn_xe_file_target_read_file para ver o importar el archivo como una tabla para facilitar el filtrado.
  3. Busque cualquier aparición de scheduler_monitor_non_yielding_ring_buffer_recorded evento. Si encuentra alguno, es una indicación de que SQL Server detectó eventos de programador que no producen y los está grabando. Estos eventos se registran antes que los volcados de memoria del programador que no son de yiedling reales y las entradas del registro de errores, que se producen después de 60-70 segundos de estado de no rendimiento. En otras palabras, puede usar el scheduler_monitor_non_yielding_ring_buffer_recorded para detectar problemas del programador de corta duración que no producen problemas que no se registran en el registro de errores, pero que todavía se han producido. Estos podrían ser motivos de falta de conectividad intermitente o de corta duración entre los nodos del grupo de disponibilidad.

Uso del registro de diagnóstico

  1. Busque el registro de diagnóstico en el directorio \Log desde el momento del evento (aplicable a los sistemas de clúster de Windows). El formato de nombre de archivo es similar a este SERVERNAME_MSSQLSERVER_SQLDIAG_x_xxxxxxxxxxxxxxxxxx.xel.

  2. Haga doble clic para abrir el archivo en SQL Server Management Studio (SSMS). Como alternativa, puede usar sys.fn_xe_file_target_read_file para ver o importar el archivo como una tabla para facilitar el filtrado.

  3. Una vez abierto en SSMS, busque una instancia de component_health_result evento y haga clic con el botón derecho en lo siguiente y elija Mostrar columna en tabla: componente, state_desc

  4. A continuación, haga clic con el botón derecho en cada columna y elija Filtrar por este valor para aplicar los siguientes filtros:

    • el evento component_health_result que es el único que se muestra
    • component field='query processing'
    • <> state_desc "clean".
  5. A continuación, haga doble clic en la columna de datos para abrir los datos XML y buscar trackingNonYieldingScheduler el valor en la primera fila.

  6. Si el valor es diferente de 0x0 eso significa que SQL Server ha detectado signos anticipados de un programador que no produce y lo informa aquí.

    Este es un ejemplo en el que SQL Server ha detectado una condición de no rendimiento con una dirección del programador "0x4fedb840040":

     <queryProcessing maxWorkers="9600" workersCreated="2574" workersIdle="1883" tasksCompletedWithinInterval="175591" pendingTasks="3" ... trackingNonYieldingScheduler="0x4fedb840040">
    

Memoria baja del sistema operativo

Podría haber varios problemas en el nivel del sistema operativo (SO) que desencadenan tal falta intermitente de respuesta. Una común es una memoria baja. En el nodo del grupo de disponibilidad remoto donde se produce el problema sospechoso, siga estos pasos:

Paso 5. Compruebe si hay problemas de memoria del sistema operativo que conducen a la paginación de memoria de SQL Server en el disco

  1. Compruebe el registro de eventos del sistema de Windows para ver si hay errores que indiquen una memoria física o virtual baja.

  2. Compruebe si hay un error 17890 en el registro de errores de SQL Server o en el registro de eventos de aplicación de Windows para ver si la memoria baja en la máquina conduce al recorte del conjunto de trabajo de todos los procesos del sistema, incluido SQL Server. El error tiene este aspecto:

    A significant part of SQL Server process memory has been paged out. This may result in a performance degradation. Duration: 0 seconds. Working set (KB): 3383250, committed (KB):    9112480, memory utilization: 37%.
    

    Para conocer los pasos detallados de la toma de datos, consulte MSSQLSERVER_17890

Paso 6. Configurar la memoria máxima del servidor y bloquear páginas en memoria correctamente

  1. Configure la memoria máxima del servidor de SQL Server en un valor que permita que el sistema operativo y otro proceso usen memoria disponible. Valor recomendado en para establecer la memoria máxima del servidor de SQL Server en no más del 75 % del tamaño de RAM en el sistema. Para obtener más información, consulte Opciones de configuración de memoria del servidor.
  2. Habilite la opción Bloquear páginas en memoria (Windows) para evitar la paginación masiva de la caché del búfer de SQL Server.

E/S de disco lento

En algunos casos, la E/S excesivamente lenta puede hacer que los subprocesos de SQL Server deje de responder temporalmente, lo que podría hacer que la otra réplica del grupo de disponibilidad se desconecte.

Paso 7. Resolución de problemas de E/S lentas

Si se producen errores que indican E/S lenta, solucione los motivos subyacentes de E/S lentas.

SQL Server has encountered 2 occurrence(s) of I/O requests taking longer than 15 seconds to complete on file [F:\TLOG\ContosoDb.ldf] in database id 9.  The OS file handle is 0x00000000000003BC.  The offset of the latest long I/O is: 0x0000003d26f600
SQL Server has encountered 2 occurrence(s) of I/O requests taking longer than 15 seconds to complete on file [F:\DATA\t38data\ContosoDb2.mdf] in database id 7.  The OS file handle is 0x000000000000118C.  The offset of the latest long I/O is: 0x00000000012000
SQL Server has encountered 1 occurrence(s) of I/O requests taking longer than 15 seconds to complete on file [F:\DATA\t38data\ContosoDb.mdf] in database id 9.  The OS file handle is 0x000000000000134C.  The offset of the latest long I/O is: 0x00000000012000

Always On Availability Groups connection with primary database terminated for secondary database 'ContosoDb2' on the availability replica 'SQLNODE1\INSTANCE19' with Replica ID: {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}. This is an informational message only. No user action is required.
Always On Availability Groups connection with primary database terminated for secondary database 'ContosoDb' on the availability replica 'SQLNODE1\INSTANCE19' with Replica ID: {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}. This is an informational message only. No user action is required.
  • Actualice todos los controladores de dispositivo y el firmware o realice otros diagnósticos asociados con el subsistema de E/S.
  • El acceso al disco se puede ralentizar mediante controladores de filtro, por ejemplo, un programa antivirus. Para aumentar la velocidad de acceso, excluya los archivos de datos de SQL Server de los exámenes de virus activos.
  • Trabaje con el proveedor de hardware y el administrador del sistema para diagnosticar y resolver la causa de E/S lenta

Para obtener instrucciones detalladas, consulte Solución de problemas de rendimiento lento de SQL Server causados por problemas de E/S y MSSQLSERVER_833.