サブスクリプション待機時間

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

このモニターはサブスクライバーへの配信を待機しているディストリビューション データベースのコマンドの遅延を確認します。

Knowledge Base article:

概要

このモニターは、未配布のコマンド タブの保留中のコマンドを示すレプリケーション モニターと類似した情報を、それらのコマンドの推定配布時間と共に収集します。推定時間がしきい値の期間よりも長い場合、警告が発生し情報が表示されます。

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

原因

ディストリビューション エージェントが停止した可能性があります。

パブリッシャー データベースに多数のコマンドがコミットされており、ディストリビューション データベースにレプリケートされている場合、保留中のトランザクションが多数ある場合があります。

ディストリビューション データベースからの読み取りまたはサブスクライバー データベースへの書き込みで、ディストリビューション エージェントにパフォーマンスの問題が発生している可能性があります。

解決策

-MaxDeliveredTransactions と -Continuous の両方を指定した場合、ディストリビューション エージェントでは指定した数のトランザクションが配信され、(-Continuous を指定した場合も) 停止されます。ジョブの完了後は配布エージェントを再開する必要があります。

パブリッシャー データベースのトランザクション量が多いために警告が発生している場合、推定配信時間を評価します。推定配信時間がスナップショットの作成および適用よりも長い場合、サブスクリプションの再初期化を検討します。

ディストリビューション データベースの読み取りでディストリビューション エージェントにパフォーマンス上の問題が発生している場合、ディストリビューション テーブルに対して fullscan オプションで統計の更新を実行します。

サブスクライバーへの書き込みでディストリビューション エージェントにパフォーマンス上の問題が発生している場合、サブスクライバー データベースに対するブロッキングまたはリソース待機を確認し、それを解決します。

追加

ディストリビューション エージェントのパフォーマンスを改善するには、次のパラメーター値を変更してテストしてください。

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.2016.Replication.Subscription
Parent MonitorSystem.Health.PerformanceState
CategoryPerformanceHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2016.Replication.MonitorType.SubscriptionLongEstimatedTime
RemotableTrue
AccessibilityPublic
Alert Message
MSSQL2016 レプリケーション:サブスクリプションで、ディストリビューション データベース内のコマンドの遅延が大きいことが検出されました。
サブスクリプション '{0}' は適用を待機している保留コマンドの長い推定時間を検出しました。
推定時間: {1} 秒
RunAsMicrosoft.SQLServer.Replication.Monitoring.RunAs.Monitor

Source Code:

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