ディストリビューターでの保留コマンド

Microsoft.SQLServer.Replication.Windows.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

同期時刻

同期時刻

 

しきい値

しきい値

5

タイムアウト (秒)

ワークフローが終了して失敗とマークされるまでの、ワークフローの許容実行時間を指定します。

200

データベース接続のタイムアウト (秒)

指定された期間中にデータベースにアクセスできない場合、ワークフローは失敗し、イベントが登録されます。

15

Element properties:

TargetMicrosoft.SQLServer.Replication.Windows.Distributor
Parent MonitorSystem.Health.PerformanceState
CategoryPerformanceHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.Replication.Windows.MonitorType.DistributorPendingCmds
RemotableTrue
AccessibilityPublic
Alert Message
MSSQL on Windows レプリケーション: ディストリビューション データベース内の多数のコマンドが、適用されるのを待機しています。
ディストリビューター (名前:'{0}'、サーバー: '{1}') は適用を待機している多数のコマンドを検出しました。
コマンド数: {2}
このモニターの解釈方法に関する注意点:
SQL Server レプリケーションはストア アンド フォワード メカニズムであるため、一部のコマンドがレプリケートされる直前にディストリビューション データベースに残っていることが予想されます。レプリケートされていないコマンドの数やレプリケートに必要な時間が、ビジネス要件に対して多すぎる場合、これは問題になります。指定したコマンドの数の解釈はすべて見込みに関連しています。数の正誤はありません。
RunAsMicrosoft.SQLServer.Core.RunAs.Monitoring

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.Replication.Windows.Monitor.DistributionDBPendingCmds" Accessibility="Public" Enabled="true" Target="SQLReplWD!Microsoft.SQLServer.Replication.Windows.Distributor" ParentMonitorID="Health!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.Replication.Windows.MonitorType.DistributorPendingCmds" ConfirmDelivery="false" RunAs="SqlCoreLib!Microsoft.SQLServer.Core.RunAs.Monitoring">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.Replication.Windows.Monitor.DistributorPendingCmds.AlertMessage">
<AlertOnState>Warning</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Warning</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Host/Property[Type='SqlCoreLib!Microsoft.SQLServer.Core.DBEngine']/InstanceName$</AlertParameter1>
<AlertParameter2>$Target/Host/Property[Type='SqlCoreLib!Microsoft.SQLServer.Core.DBEngine']/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>
<MachineName>$Target/Host/Property[Type='SqlCoreLib!Microsoft.SQLServer.Core.DBEngine']/MachineName$</MachineName>
<InstanceName>$Target/Host/Property[Type='SqlCoreLib!Microsoft.SQLServer.Core.DBEngine']/InstanceName$</InstanceName>
<SqlTimeoutSeconds>15</SqlTimeoutSeconds>
<ConnectionString>$Target/Host/Property[Type='SqlCoreLib!Microsoft.SQLServer.Core.DBEngine']/ConnectionString$</ConnectionString>
<MonitoringType>$Target/Host/Property[Type="SqlDiscW!Microsoft.SQLServer.Windows.DBEngine"]/MonitoringType$</MonitoringType>
<Threshold>5</Threshold>
<NumSamples>6</NumSamples>
<IntervalSeconds>300</IntervalSeconds>
<SyncTime/>
<TimeoutSeconds>200</TimeoutSeconds>
</Configuration>
</UnitMonitor>