約 80 件の記事でさまざまなレプリケーション方法を使用するマージ パブリケーションがあります (1 つのテーブルで host_name フィルタリング、他のいくつかのテーブルで結合フィルタリング、双方向同期方向を使用するテーブル、「ダウンロードのみ、サブスクライバーの変更を禁止する」テーブル、いくつかのテーブルID 範囲管理を使用するテーブル、それを必要としない他のテーブル)。
必要なすべてのテーブルが既にあるサブスクライバー データベースにプッシュ レプリケーションを使用しているため、「名前が使用中の場合のアクション」には「データの削除」を使用しています。テーブルは、サブスクライバー データベースとパブリケーション データベースの両方で同一のスキーマを持ちますが、レプリケーションが開始されるまでは空です。
問題は、サブスクリプションの初期化に 3 分ほどかかる場合もあれば、同じようにテンプレート化されたサブスクライバー データベースと同じ開始データセット (~10,000 レコード) を使用して、~20 分後にタイムアウトになることもあります。また、初期化後、同期するときに、約 5 秒かかる代わりに、約 20 分かかります。また、レプリケーション モニターの履歴を見ると、同期履歴には、何千回ものスキーマ変更が行われていることが示されています (データの変更がない場合でも)。
詳細ログを有効にしてスキーマの変更内容を確認しましたが、すべてのテーブルを繰り返しループし、すべての制約をオフにしてから再びオンにしているようです。なぜこれをしているのか、私は途方に暮れています。
関連する場合に注意してください: 100 文字の Unicode 文字列 (文字の完全な Unicode 範囲からランダムに作成された) を、異なるサブスクライバーの host_name として使用しています。これが問題の原因ではないかと疑っていましたが、50 文字の小文字の文字列を使用して問題を再現しました。
最後に、すべてのサーバーが同じデータ センターでホストされているため、ネットワークの遅延が問題になることはないと思います。