Latence de l'abonnement

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

Ce moniteur vérifie la latence des commandes de la base de données de distribution en attente de livraison aux abonnés. Notez que ce moniteur est désactivé pour les abonnements de fusion.

Knowledge Base article:

Récapitulatif

Ce moniteur collecte des informations similaires à celles du moniteur de réplication qui affiche les commandes en attente sous l'onglet Commandes non distribuées, ainsi que la durée estimée de livraison de ces commandes. Si la durée estimée est supérieure à celle d'une période seuil, une alerte est déclenchée pour afficher les informations. Notez que ce moniteur est désactivé pour les abonnements de fusion.

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

Causes

L'Agent de distribution est peut-être arrêté.

De grandes quantités de transactions en attente avec de nombreuses commandes sont peut-être validées sur la base de données du serveur de publication et répliquées sur la base de données de distribution ;

L'agent de distribution rencontre peut-être des problèmes de performances durant la lecture de la base de données de distribution ou l'écriture dans la base de données d'abonné.

Résolutions

Si les valeurs -MaxDeliveredTransactions et -Continuous sont toutes deux spécifiées, l'Agent de distribution livre le nombre spécifié de transactions puis s'arrête (bien que -Continuous soit spécifié). Vous devez redémarrer l'Agent de distribution une fois le travail terminé.

Si l'alerte est due à des transactions volumineuses dans la base de données du serveur de publication, évaluez la durée estimée de livraison. Réinitialisez l'abonnement si la durée de livraison estimée est supérieure à la durée de création et d'application d'un instantané.

Si l'agent de distribution rencontre des problèmes de performances lors de la lecture de la base de données de distribution, exécutez une mise à jour des statistiques avec l'option d'analyse complète (fullscan) des tables de distribution.

Si l'agent de distribution rencontre des problèmes de performances durant l'écriture sur l'abonné, vérifiez s'il y a des blocages ou des attentes de ressources sur la base de données d'abonné, et résolvez-les.

Supplémentaire

Essayez de modifier les valeurs des paramètres ci-dessous pour voir si cela peut améliorer les performances de l'Agent de distribution :

TailleLotValidé

Nombre de transactions à émettre à l'Abonné avant l'émission d'une instruction COMMIT. La valeur par défaut est 100.

DépassementDélaiAttenteRequête

Nombre de secondes avant l'expiration de la requête. La valeur par défaut est 1 800 secondes.

FluxAbonnements

Nombre de connexions autorisées par l'Agent de distribution pour appliquer des traitements par lots de modifications en parallèle à un abonné. Pour un serveur de publication SQL Server, une plage de valeurs comprises entre 1 et 64 est prise en charge

Externe

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

Paramètres remplaçables

Nom

Description

Valeur par défaut

Priorité d'alerte

Définit la priorité de l'alerte.

Normale

Gravité d'alerte

Définit la gravité de l'alerte.

Avertissement

Activé

Active ou désactive le flux de travail.

Oui

Génère des alertes

Définit si le flux de travail génère une alerte.

Oui

Intervalle (en secondes)

Intervalle régulier (en secondes) auquel exécuter le flux de travail.

300

Heure de synchronisation

Heure de synchronisation

 

Seuil

Seuil

60

Délai d'attente (secondes)

Spécifie la durée pendant laquelle le flux de travail est autorisé à s'exécuter avant d'être fermé et marqué comme ayant échoué.

200

Délai d’attente pour la connexion de base de données (secondes)

Le workflow échoue et enregistre un événement s’il ne peut pas accéder à la base de données pendant la période spécifiée.

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
Réplication MSSQL sur Windows : Latence élevée des commandes dans la base de données de distribution détectée pour l'abonnement.
L'abonnement « {0} » a détecté une longue durée estimée pour les commandes en attente d'application.
Durée estimée : {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>
<NetbiosComputerName>$Target/Host/Host/Property[Type='SqlCoreLib!Microsoft.SQLServer.Core.DBEngine']/NetbiosComputerName$</NetbiosComputerName>
<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>