Latencia de suscripción

Microsoft.SQLServer.Replication.Windows.Monitor.SubscriptionLongEstimatedTimeMonitor (UnitMonitor)

Este monitor comprueba la latencia de los comandos en la base de datos de distribución pendientes de entrega a los suscriptores. Tenga en cuenta que este monitor está deshabilitado para las suscripciones de mezcla.

Knowledge Base article:

Resumen

Este monitor recopila información similar al monitor de replicación que muestra los comandos pendientes en la pestaña de comandos no distribuidos junto con el tiempo estimado de entrega de esos comandos. Si el tiempo estimado es superior al de un período de umbral, se activará una alerta para mostrar la información. Tenga en cuenta que este monitor está deshabilitado para las suscripciones de mezcla.

http://msdn.microsoft.com/library/ms183374.aspx

Causas

Es posible que se detenga el agente de distribución.

Es posible que haya grandes cantidades de transacciones pendientes con muchos comandos confirmados en la base de datos del publicador y que se replican a la base de datos de distribución;

Es posible que el agente de distribución esté experimentando problemas de rendimiento durante la lectura de la base de datos de distribución o durante la escritura en la base de datos del suscriptor.

Resoluciones

Si se especifican -MaxDeliveredTransactions y -Continuous, el agente de distribución entrega el número especificado de transacciones y, a continuación, se detiene (aunque se haya especificado -Continuous). Debe reiniciar el agente de distribución una vez completado el trabajo.

Si la alerta se debe a grandes volúmenes de transacciones en la base de datos del publicador, evalúe el tiempo estimado de la entrega. Considere la posibilidad de reinicializar la suscripción si el tiempo de entrega estimado es superior al necesario para crear y aplicar una instantánea.

Si el agente de distribución está experimentando problemas de rendimiento durante la lectura de la base de datos de distribución, ejecute la actualización de estadísticas mediante la opción fullscan en las tablas de distribución.

Si el agente de distribución está experimentando problemas de rendimiento durante la escritura en el suscriptor, compruebe y solucione los bloqueos o esperas de recursos en la base de datos del suscriptor.

Adicional

Pruebe si el cambio de los valores de los parámetros siguientes pueden ayudar a mejorar el rendimiento del agente de distribución:

CommitBatchSize

El número de transacciones a emitir al suscriptor antes de emitir una instrucción COMMIT. El valor predeterminado es 100.

QueryTimeOut

Número de segundos transcurridos antes de que se supere el tiempo de espera de la consulta. El valor predeterminado es de 1800 segundos.

SubscriptionStreams

Número de conexiones permitidas por agente de distribución para aplicar lotes de cambios en paralelo a un suscriptor. Para un publicador de SQL Server, se admite un rango de valores comprendido entre 1 y 64

Externo

https://msdn.microsoft.com/library/ms173804.aspx)

Parámetros invalidables

Nombre

Descripción

Valor predeterminado

Prioridad de la alerta

Define la prioridad de alerta.

Normal

Gravedad de la alerta

Define la gravedad de alerta.

Advertencia

Habilitado

Habilita o deshabilita el flujo de trabajo.

Genera alertas.

Define si el flujo de trabajo genera una alerta.

Intervalo (segundos)

Intervalo de tiempo periódico en segundos en que se ejecuta el flujo de trabajo.

300

Hora de sincronización

Hora de sincronización

 

Umbral

Umbral

60

Tiempo de espera (segundos)

Especifica el tiempo durante el que se puede ejecutar el flujo de trabajo antes de que se cierre y se marque como error.

200

Tiempo de expiración de la conexión de base de datos (segundos)

Se producirá un error en el flujo de trabajo y se registrará un evento si no puede obtener acceso a la base de datos durante el período especificado.

15

Element properties:

TargetMicrosoft.SQLServer.Replication.Windows.Subscription
Parent MonitorSystem.Health.PerformanceState
CategoryPerformanceHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.Replication.Windows.MonitorType.SubscriptionLongEstimatedTime
RemotableTrue
AccessibilityPublic
Alert Message
MSSQL on Windows Replication: latencia elevada de comandos en la base de datos de distribución detectada para la suscripción.
La suscripción «{0}» ha detectado un tiempo estimado de duración de comandos pendientes en espera para aplicarse.
Tiempo estimado: {1}s
RunAsMicrosoft.SQLServer.Core.RunAs.Monitoring

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.Replication.Windows.Monitor.SubscriptionLongEstimatedTimeMonitor" Accessibility="Public" Enabled="true" Target="SQLReplWD!Microsoft.SQLServer.Replication.Windows.Subscription" ParentMonitorID="Health!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.Replication.Windows.MonitorType.SubscriptionLongEstimatedTime" ConfirmDelivery="false" RunAs="SqlCoreLib!Microsoft.SQLServer.Core.RunAs.Monitoring">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.Replication.Windows.Monitor.SubscriptionLongEstimatedTime.AlertMessage">
<AlertOnState>Warning</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Warning</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Property[Type='MSRL!Microsoft.SQLServer.Replication.Core.GenericSubscription']/SubscriptionName$</AlertParameter1>
<AlertParameter2>$Data/Context/Property[@Name='EstimatedTime']$</AlertParameter2>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Health" MonitorTypeStateID="Health" HealthState="Success"/>
<OperationalState ID="Warning" MonitorTypeStateID="Warning" HealthState="Warning"/>
</OperationalStates>
<Configuration>
<MachineName>$Target/Host/Host/Property[Type='SqlCoreLib!Microsoft.SQLServer.Core.DBEngine']/MachineName$</MachineName>
<InstanceName>$Target/Host/Host/Property[Type='SqlCoreLib!Microsoft.SQLServer.Core.DBEngine']/InstanceName$</InstanceName>
<SqlTimeoutSeconds>15</SqlTimeoutSeconds>
<ConnectionString>$Target/Property[Type="MSRL!Microsoft.SQLServer.Replication.Core.GenericSubscription"]/Distributor$</ConnectionString>
<MonitoringType>$Target/Host/Host/Property[Type="SqlDiscW!Microsoft.SQLServer.Windows.DBEngine"]/MonitoringType$</MonitoringType>
<SubscriptionType>$Target/Property[Type="MSRL!Microsoft.SQLServer.Replication.Core.GenericSubscription"]/Type$</SubscriptionType>
<PublisherName>$Target/Property[Type="MSRL!Microsoft.SQLServer.Replication.Core.GenericSubscription"]/Publisher$</PublisherName>
<Subscriber>$Target/Property[Type="MSRL!Microsoft.SQLServer.Replication.Core.GenericSubscription"]/Subscriber$</Subscriber>
<PublisherDb>$Target/Property[Type="MSRL!Microsoft.SQLServer.Replication.Core.GenericSubscription"]/PublicationDatabase$</PublisherDb>
<SubscriberDb>$Target/Property[Type="MSRL!Microsoft.SQLServer.Replication.Core.GenericSubscription"]/SubscriptionDatabase$</SubscriberDb>
<Publication>$Target/Property[Type="MSRL!Microsoft.SQLServer.Replication.Core.GenericSubscription"]/PublicationName$</Publication>
<ReplicationType>$Target/Property[Type="MSRL!Microsoft.SQLServer.Replication.Core.GenericSubscription"]/ReplicationType$</ReplicationType>
<EstimatedTimeSecondsThreshold>60</EstimatedTimeSecondsThreshold>
<IntervalSeconds>300</IntervalSeconds>
<SyncTime/>
<TimeoutSeconds>200</TimeoutSeconds>
<CheckMachineAndInstanceName>false</CheckMachineAndInstanceName>
</Configuration>
</UnitMonitor>