Задержка подписки

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

Данный монитор проверяет задержку для команд в базе данных распространения, ожидающих доставку подписчикам.

Knowledge Base article:

Сводка

Этот монитор собирает данные аналогично монитору репликации, который отображает ожидающие команды, на вкладке нераспространенных команд вместе с оценкой времени доставки этих команд. Если оценка выше, чем пороговый период, создается оповещение с данными об этом.

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

Причины

Агент распространителя может быть остановлен.

Может присутствовать много ожидающих транзакций с командами, зафиксированными в базе данных издателя и реплицированными в базе данных распространения.

Агент распространения может испытывать проблемы с производительностью при чтении из базы данных распространения или записи в базу данных подписчика.

Решения неисправностей

Если параметры -MaxDeliveredTransactions и -Continuous указаны одновременно, агент распространения доставляет указанное число транзакций и останавливается (невзирая на -Continuous). После завершения задания агент распространения следует перезапустить.

Если оповещение создано вследствие наличия большого объема транзакций в базе данных издателя, оцените ориентировочное время доставки. Попробуйте повторно инициализировать подписку, если оценка времени доставки превышает время создания и применения снимка.

Если в агенте распространения возникают проблемы производительности при чтении из базы данных распространения, выполните обновление статистики с полным сканированием в базе данных распространения.

Если агент распространения испытывает проблемы с производительностью при записи в подписчик, найдите и устраните все блокировки и ожидания ресурсов в базе данных подписчика.

Дополнительный

Попробуйте изменить значение указанных ниже параметров. Это может повысить производительность агента распространения.

CommitBatchSize

Число транзакций, создаваемых для подписчика, перед выполнением оператора COMMIT. Значение по умолчанию — 100.

QueryTimeOut

Время ожидания выполнения запроса в секундах. Значение по умолчанию — 1800 секунд.

SubscriptionStreams

Число подключений, разрешенных для каждого агента распространения при параллельном применении пакетов изменений к подписчику. Для издателя SQL Server поддерживается диапазон значений от 1 до 64.

Внешний

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

Переопределяемые параметры

Имя

Описание

Значение по умолчанию

Приоритет предупреждения

Определяет приоритет предупреждения.

Обычные

Серьезность предупреждения

Определяет серьезность предупреждения.

Предупреждение

Включено

Включает или отключает рабочий процесс.

Да

Создает предупреждения

Определяет, создает ли рабочий процесс предупреждения.

Да

Интервал (секунды)

Повторяющийся интервал времени в секундах, по истечении которого запускается рабочий процесс.

300

Время синхронизации

Время синхронизации

 

Порог

Порог

60

Время ожидания (секунды)

Определяет время, в течение которого возможно выполнение рабочего процесса перед закрытием и пометкой как сбойный.

300

Время ожидания для подключения к базе данных (секунды)

Рабочий процесс завершится ошибкой и зарегистрирует событие, если он не сможет получить доступ к базе данных за указанный промежуток времени.

15

Element properties:

TargetMicrosoft.SQLServer.2014.Replication.Subscription
Parent MonitorSystem.Health.PerformanceState
CategoryPerformanceHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2014.Replication.MonitorType.SubscriptionLongEstimatedTime
RemotableTrue
AccessibilityPublic
Alert Message
Репликация MSSQL2014: обнаружена длительная задержка команд в базе данных распространения.
В подписке "{0}" обнаружено длительное оценочное время ожидания применения команд, находящихся в очереди.
Оценочное время: {1}с
RunAsMicrosoft.SQLServer.Replication.Monitoring.RunAs.Monitor

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.2014.Replication.Monitor.SubscriptionLongEstimatedTimeMonitor" Accessibility="Public" Enabled="true" Target="MS2RD!Microsoft.SQLServer.2014.Replication.Subscription" ParentMonitorID="Health!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2014.Replication.MonitorType.SubscriptionLongEstimatedTime" ConfirmDelivery="false" RunAs="MSRL!Microsoft.SQLServer.Replication.Monitoring.RunAs.Monitor">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2014.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>