Latencia de suscripción

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

Este monitor comprueba la latencia de comandos en la base de datos de distribución que se encuentra a la espera de ser entregada a los suscriptores.

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 dichos comandos. Si el tiempo estimado es superior que el de un período de umbral, se activará una alerta para visualizar la información.

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 que el 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 las estadísticas de actualización 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 alerta

Define la prioridad de la alerta.

Normal

Gravedad de alerta

Define la gravedad de la 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

Tiempo de sincronización

Tiempo 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.

300

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.2012.Replication.Subscription
Parent MonitorSystem.Health.PerformanceState
CategoryPerformanceHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2012.Replication.MonitorType.SubscriptionLongEstimatedTime
RemotableTrue
AccessibilityPublic
Alert Message
Replicación de MSSQL2012: 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.Replication.Monitoring.RunAs.Monitor

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.2012.Replication.Monitor.SubscriptionLongEstimatedTimeMonitor" Accessibility="Public" Enabled="true" Target="MS2RD!Microsoft.SQLServer.2012.Replication.Subscription" ParentMonitorID="Health!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2012.Replication.MonitorType.SubscriptionLongEstimatedTime" ConfirmDelivery="false" RunAs="MSRL!Microsoft.SQLServer.Replication.Monitoring.RunAs.Monitor">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2012.Replication.Monitor.SubscriptionLongEstimatedTime.AlertMessage">
<AlertOnState>Warning</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Warning</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Property[Type='MSRL!Microsoft.SQLServer.Replication.Library.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>
<SqlTimeout>15</SqlTimeout>
<ConnectionString>$Target/Property[Type="MSRL!Microsoft.SQLServer.Replication.Library.GenericSubscription"]/Distributor$</ConnectionString>
<SubscriptionType>$Target/Property[Type="MSRL!Microsoft.SQLServer.Replication.Library.GenericSubscription"]/Type$</SubscriptionType>
<PublisherName>$Target/Property[Type="MSRL!Microsoft.SQLServer.Replication.Library.GenericSubscription"]/Publisher$</PublisherName>
<Subscriber>$Target/Property[Type="MSRL!Microsoft.SQLServer.Replication.Library.GenericSubscription"]/Subscriber$</Subscriber>
<PublisherDb>$Target/Property[Type="MSRL!Microsoft.SQLServer.Replication.Library.GenericSubscription"]/PublicationDatabase$</PublisherDb>
<SubscriberDb>$Target/Property[Type="MSRL!Microsoft.SQLServer.Replication.Library.GenericSubscription"]/SubscriptionDatabase$</SubscriberDb>
<Publication>$Target/Property[Type="MSRL!Microsoft.SQLServer.Replication.Library.GenericSubscription"]/PublicationName$</Publication>
<ReplicationType>$Target/Property[Type="MSRL!Microsoft.SQLServer.Replication.Library.GenericSubscription"]/ReplicationType$</ReplicationType>
<EstimatedTimeSecondsThreshold>60</EstimatedTimeSecondsThreshold>
<IntervalSeconds>300</IntervalSeconds>
<SyncTime/>
<TimeoutSeconds>300</TimeoutSeconds>
</Configuration>
</UnitMonitor>