Abonnementlatenz

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

Dieser Monitor überprüft die Latenz für Befehle in der Verteilungsdatenbank, die auf eine Übermittlung an die Abonnenten warten. Beachten Sie, dass dieser Monitor für Mergeabonnements deaktiviert ist.

Knowledge Base article:

Zusammenfassung

Dieser Monitor erfasst Informationen ähnlich wie der Replikationsmonitor, der die ausstehenden Befehle auf der Registerkarte "Nicht verteilte Befehle" zusammen mit der geschätzten Zeit für die Übermittlung dieser Befehle anzeigt. Wenn die geschätzte Zeit länger ist als die in einem Schwellenwertzeitraum angegebene Zeit, wird eine Benachrichtigung ausgelöst, um die Informationen anzuzeigen. Beachten Sie, dass dieser Monitor für Mergeabonnements deaktiviert ist.

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

Ursachen

Der Verteilungs-Agent wurde ggf. beendet.

Möglicherweise ist eine große Menge ausstehender Transaktionen mit zahlreichen Befehlen vorhanden, für die ein Commit für die Verlegerdatenbank ausgeführt wurde und die in die Verteilungsdatenbank repliziert werden.

Beim Verteilungs-Agent treten möglicherweise Leistungsprobleme beim Lesen aus der Verteilungsdatenbank oder beim Schreiben in die Abonnentendatenbank auf.

Lösungen

Wenn sowohl "-MaxDeliveredTransactions" als auch "-Continuous" angegeben wird, übermittelt der Verteilungs-Agent die angegebene Anzahl von Transaktionen und wird dann beendet (obwohl "-Continuous" angegeben wird). Sie müssen den Verteilungs-Agent neu starten, nachdem der Auftrag abgeschlossen wurde.

Wenn die Benachrichtigung aufgrund eines großen Transaktionsvolumens in der Verlegerdatenbank erfolgt, werten Sie die geschätzte Übermittlungszeit aus. Initialisieren Sie das Abonnement ggf. erneut, wenn die geschätzte Übermittlungszeit länger als das Erstellen und Anwenden einer Momentaufnahme ist.

Wenn für den Verteilungs-Agent Leistungsprobleme beim Lesen der Verteilungsdatenbank auftreten, führen Sie die Aktualisierung der Statistiken mit der Option "Fullscan" für die Verteilungstabellen aus.

Wenn beim Verteilungs-Agent Leistungsprobleme beim Schreiben in den Abonnenten auftreten, suchen Sie nach Blockierungen oder Ressourcenwartevorgängen, und beheben Sie diese.

Zusätzlich

Testen Sie, ob das Ändern der unten genannten Parameterwerte die Leistung des Verteilungs-Agents verbessern kann:

CommitBatchSize

Die Anzahl der Transaktionen, die an den Abonnenten ausgegeben werden müssen, bevor eine COMMIT-Anweisung ausgegeben wird. Der Standardwert ist 100.

QueryTimeOut

Die Anzahl von Sekunden, bevor ein Timeout der Abfrage erfolgt. Der Standardwert ist 1.800 Sekunden.

SubscriptionStreams

Die Anzahl der Verbindungen, die pro Verteilungs-Agent zum parallelen Anwenden von Änderungsbatches auf einen Abonnenten zulässig sind. Für einen SQL Server-Verleger wird ein Wertebereich von 1 bis 64 unterstützt.

Extern

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

Überschreibbare Parameter

Name

Beschreibung

Standardwert

Warnungspriorität

Definiert die Warnungspriorität.

Normal

Warnungsschweregrad

Definiert den Warnungsschweregrad.

Warnung

Aktiviert

Aktiviert oder deaktiviert den Workflow.

Ja

Generiert Warnungen

Definiert, ob der Workflow eine Warnung generiert.

Ja

Intervall (Sekunden)

Gibt das Wiederholungsintervall in Sekunden für die Ausführung des Workflows an.

300

Synchronisierungszeit

Synchronisierungszeit

 

Schwellenwert

Schwellenwert

60

Timeout (Sekunden)

Gibt an, wie lange der Workflow ausgeführt werden kann, bevor er geschlossen und als fehlerhaft markiert wird.

200

Timeout für Datenbankverbindung (Sekunden)

Es tritt ein Fehler beim Workflow auf, und ein Ereignis wird registriert, wenn der Workflow nicht innerhalb des angegebenen Zeitraums auf die Datenbank zugreifen kann.

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 unter Windows-Replikation: Hohe Latenz bei Befehlen in der Verteilungsdatenbank für das Abonnement ermittelt
Das Abonnement "{0}" hat eine lang geschätzte Zeit für ausstehende Befehle ermittelt, die auf ihre Anwendung warten.
Geschätzte Zeit: {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>