Ожидающие выполнения команды в распространителе

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

На распространителе имеются команды, ожидающие доставки.

Knowledge Base article:

Сводка

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

Причины

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

Увеличенный объем репликации может вызывать проблемы с производительностью.

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

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

Перезапустить агент распространителя.

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

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

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

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

CommitBatchSize

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

QueryTimeOut

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

SubscriptionStreams

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

Внешний

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

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

Имя

Описание

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

Включено

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

Да

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

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

Да

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

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

300

Число примеров

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

6

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

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

300

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

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

 

Порог

Порог

5

Element properties:

TargetMicrosoft.SQLServer.2014.Replication.Distributor
Parent MonitorSystem.Health.PerformanceState
CategoryPerformanceHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2014.Replication.MonitorType.DistributorPendingCmds
RemotableTrue
AccessibilityPublic
Alert Message
Репликация MSSQL2014: в базе данных распространения ожидает применения большое количество команд.
Распространитель (имя: "{0}", сервер: "{1}") обнаружил большое количество команд, ожидающих применения.
Количество команд: {2}

Предупреждение об интерпретировании этого монитора.
Механизм репликации SQL Server основан на сохранении и пересылке, поэтому предполагается, что некоторые команды попадают в базу данных распространения перед репликацией. Если с учетом бизнес-требований количество команд, для которых не выполнена репликация, становится слишком большим, и/или требуется слишком много времени на их репликацию, могут возникнуть проблемы. Интерпретирование конкретного количества команд напрямую связано с вашими ожиданиями. Не существует правильного или неправильного значения.
RunAsMicrosoft.SQLServer.Replication.Monitoring.RunAs.Monitor

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.2014.Replication.Monitor.DistributionDBPendingCmds" Accessibility="Public" Enabled="true" Target="MS2RD!Microsoft.SQLServer.2014.Replication.Distributor" ParentMonitorID="Health!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2014.Replication.MonitorType.DistributorPendingCmds" ConfirmDelivery="false" RunAs="MSRL!Microsoft.SQLServer.Replication.Monitoring.RunAs.Monitor">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2014.Replication.Monitor.DistributorPendingCmds.AlertMessage">
<AlertOnState>Warning</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Warning</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Property[Type='MSRL!Microsoft.SQLServer.Replication.Library.GenericDistributor']/InstanceName$</AlertParameter1>
<AlertParameter2>$Target/Property[Type='MSRL!Microsoft.SQLServer.Replication.Library.GenericDistributor']/ConnectionString$</AlertParameter2>
<AlertParameter3>$Data/Context/Property[@Name='DistributorPendingCmds']$</AlertParameter3>
<AlertParameter4>$Data/Context/Property[@Name='Message']$</AlertParameter4>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Health" MonitorTypeStateID="Health" HealthState="Success"/>
<OperationalState ID="Warning" MonitorTypeStateID="Warning" HealthState="Warning"/>
</OperationalStates>
<Configuration>
<SqlTimeout>300</SqlTimeout>
<ConnectionString>$Target/Property[Type='MSRL!Microsoft.SQLServer.Replication.Library.GenericDistributor']/ConnectionString$</ConnectionString>
<Threshold>5</Threshold>
<NumSamples>6</NumSamples>
<IntervalSeconds>300</IntervalSeconds>
<SyncTime/>
</Configuration>
</UnitMonitor>