パフォーマンスに問題のあるシステム
レプリケーションのパフォーマンスは、以下に示す 5 つのディメンションで計測できます。
待機時間 : レプリケーション トポロジにおいて、データの変更内容が各ノード間に反映されるまでの時間。
スループット : 長期間にわたってシステムが維持できるレプリケーションの総利用状況 (一定期間内に配信されたコマンドで測定されます)。
同時実行数 : システムにおいて同時に実行可能なレプリケーションのプロセス数。
同期の実行時間 : 同期処理が完了するまでに必要な時間。
リソース消費量 : レプリケーション プロセスの結果として使用されるハードウェアおよびネットワークのリソース。
トランザクション レプリケーションに最も関連するのは待機時間およびスループットです。トランザクション レプリケーションを使用するシステムでは、一般的に短い待機時間と高いスループットが要求されるためです。マージ レプリケーションに最も関連するのは同時実行数と同期の実行時間です。マージ レプリケーションを使用するシステムでは多数のサブスクライバが存在することが多く、これらのサブスクライバに対してパブリッシャが同時に多数の同期を行うことがあるためです。
レプリケーションの構成を終えたら、パフォーマンス基準を策定することをお勧めします。パフォーマンス基準を策定することによって、アプリケーションおよびトポロジにおける通常のワークロードに対するレプリケーションの動作方法について判断できるようになります。レプリケーション モニタおよびシステム モニタを使用し、上記のレプリケーション パフォーマンスに関する 5 つのディメンションの標準となる数値を決定してください。基準となる数値を設定したら、レプリケーション モニタでしきい値と警告を設定します。詳細については、「レプリケーション モニタを使用したパフォーマンスの監視」、「レプリケーション モニタのしきい値と警告の設定」、および「レプリケーション エージェント イベントに対する警告の使用」を参照してください。 レプリケーションのトラブルシューティングに使用するツールの詳細については、「トラブルシューティング ツール (レプリケーション)」を参照してください。
説明およびユーザーの操作
レプリケーションのパフォーマンスは以下の要因に影響されます。
サーバーおよびネットワークのハードウェア
データベースの設計
ディストリビュータの構成
パブリケーションの設計およびオプション
フィルタの設計および使用方法
サブスクリプション オプション
スナップショット オプション
エージェント パラメータ
メンテナンス
パフォーマンスに関する問題が発生した場合は、以下のセクションで示す項目に目を通し、問題の解決に役立つ場合は変更を適用してください。次に例を示します。
マージ レプリケーションにおいて、1 つのフィルタ選択されたアーティクルに同期時間の大部分が費やされているとレプリケーション モニタに表示された場合は、適切なフィルタ オプションが使用されていること、およびフィルタ内の列にインデックスが作成されていることを確認します。
トランザクション レプリケーションで、パブリッシュされたテーブルでのバッチ処理の実行時に待機時間が長くなった場合は、ストアド プロシージャの実行をレプリケートして、サブスクライバでバッチ処理を行うことを検討します。
すべての種類のレプリケーション
すべての種類のレプリケーションについて、以下の項目を検討する必要があります。詳細については、「レプリケーションの全般的パフォーマンスの向上」を参照してください。
サーバーおよびネットワーク
MicrosoftSQL Server データベース エンジンに割り当てるメモリの最大容量と最小容量を設定する。
データベースのデータ ファイルおよびログ ファイルを適切に配置する。レプリケーションに関係するすべてのデータベースのトランザクション ログを、別のディスク ドライブに格納します。
レプリケーションで使用するサーバー、特にディストリビュータにメモリを追加する。
マルチプロセッサ コンピュータを使用する。
高速ネットワークを使用する。ネットワークが低速な場合は、適切なネットワーク設定とエージェント パラメータを指定してください。詳細については、「低速ネットワークが引き起こす問題」を参照してください。
データベースの設計
データベース設計の推奨事項に従う。
READ_COMMITTED_SNAPSHOT データベース オプションを設定する。
トリガのアプリケーション ロジックに注意する。
Large Object (LOB) データ型の使用を制限する。
パブリケーションの設計およびオプション
必要なデータのみをパブリッシュする。
パブリケーションの設計とアプリケーションの動作により競合を最小化する。
行フィルタの使用は慎重に行う。
初期テスト、監視、またはデバッグの間を除いて、レプリケーション エージェントの冗長レベルを低く設定する。
サブスクリプション オプション
サブスクライバの数が多い場合はプル サブスクリプションを使用する。
サブスクライバの処理が遅すぎる場合はサブスクリプションを再初期化する。
スナップショット オプション
必要に応じて、データベースの利用状況が少ないときにのみスナップショット エージェントを実行する。
パブリケーションごとに単一のスナップショット フォルダを使用する。
データベースまたはログ ファイルの格納に使用しないディストリビュータのローカル ドライブにスナップショット フォルダを配置する。
サブスクライバにサブスクリプション データベースを作成する場合は、単純復旧モデルまたは一括ログ復旧モデルを指定する。
低帯域ネットワークでは、リムーバブル メディア上での代替スナップショット フォルダおよび圧縮スナップショットを使用する。
スナップショット エージェント、マージ エージェント、およびディストリビューション エージェントに対して、–MaxBCPThreads パラメータを使用する。ディストリビューション エージェントおよびマージ エージェントの –UseInprocLoader パラメータを使用する。
トランザクション レプリケーション
トランザクション レプリケーションについては、以下の項目を検討する必要があります。詳細については、「トランザクション レプリケーションのパフォーマンスの向上」を参照してください。
データベースの設計
- アプリケーションの設計で、トランザクションのサイズを最小化する。
ディストリビュータの構成
ディストリビューション専用サーバーを構成する。
ディストリビューション データベースに適切なサイズを設定する。
パブリケーションの設計およびオプション
パブリッシュされたテーブルに対してバッチ更新を行う場合は、ストアド プロシージャの実行をレプリケートする。
複数のパブリケーションにアーティクルを分散する。
サブスクリプション オプション
同一のパブリッシャに複数のパブリケーションを格納する場合は、共有エージェントの代わりに独立エージェントを使用する (これは既定の動作です)。
エージェントを連続して実行し、高い頻度のスケジュールにはしない。
エージェント パラメータ
ログ リーダー エージェントに対して –MaxCmdsInTran パラメータを使用する。
ディストリビューション エージェントに対して –SubcriptionStreams パラメータを使用する。
ログ リーダー エージェントの -ReadBatchSize パラメータの値を大きくする。
ディストリビューション エージェントの -CommitBatchSize パラメータの値を大きくする。
ログ リーダー エージェントの -PollingInterval パラメータの値を小さくする。
マージ レプリケーション
マージ レプリケーションについては、以下の項目を検討する必要があります。詳細については、「マージ レプリケーション パフォーマンスの向上」を参照してください。
データベースの設計
行フィルタおよび結合フィルタ内で使用される列にインデックスを作成する。
Large Object (LOB) データ型を含むテーブルで、正規化を十分に行うことを検討する。
パブリケーションの設計
90RTM (SQL Server 2005) 以上のパブリケーション互換性レベルを使用する。
適切なパブリケーション保有期間設定を使用する。
パブリッシャでのみ変更されるテーブルについては、ダウンロード専用アーティクルを使用する。
フィルタの設計および使用方法
複雑な行フィルタ句を制限する。
パラメータ化されたフィルタによる事前計算済みパーティションを使用する (これは既定で使用される機能です)。
フィルタ選択されたデータがユーザー間で共有されていない場合は、重複しないパーティションを使用する。
複雑な結合フィルタ階層を作成しない。
ロジックで許容される場合は、join_unique_key オプションに「1」を設定する。
事前計算されたパーティションに関する注意点
バッチにデータの変更が多数含まれている場合は、アプリケーションを慎重に設計してください。結合フィルタに含まれる親テーブル内のデータへの変更は、子テーブル内で対応する変更が生じる前に行う必要があります。
バッチにデータの変更が多数含まれている場合は、バッチ内の変更の数を減らして、バッチとバッチの間にマージ エージェントを実行します。この処理を実行できない場合は、パブリケーションの generation_leveling_threshold の値を大きくします。
サブスクリプションの注意点
- サブスクリプションの同期スケジュールをずらす。
エージェント パラメータ
- サブスクリプションが高速接続を介して同期され、パブリッシャおよびサブスクライバから変更が送信される場合は、マージ エージェントに対して –ParallelUploadDownload パラメータを使用する。
スナップショット オプション
初期スナップショットを生成する前に大きなテーブルに ROWGUIDCOL 列を作成する。
スナップショットを事前に生成するか、最初の同期時にサブスクライバからスナップショットの生成および適用を要求できるようにする。
メンテナンス
必要な場合、マージ レプリケーションのシステム テーブルのインデックスを再度作成する。
レプリケーション モニタの [同期の履歴] タブを使用して、同期のパフォーマンスを監視する。