Общие сведения о порядке обработки репликации слиянием
В этой статье описывается порядок обработки статьи репликации слиянием.
Оригинальная версия продукта: SQL Server
Исходный номер базы знаний: 307356
Сводка
Агент слияния следует определенному набору правил, определяющих порядок применения изменений в статьях в процессе слияния во время синхронизации.
В этой статье описывается, почему порядок обработки статей важен.
Дополнительная информация
Существует две основные причины, по которым важен порядок обработки статей:
Во многих случаях агент слияния должны обрабатывать изменения в статьях, которые участвуют в ограничениях декларативной ссылочной целостности (DRI), в определенном порядке для достижения оптимальной производительности. В противном случае агент слияния может потребоваться повторить операции языка обработки данных (DML) в неправильном порядке (то есть попытаться вставить дочернюю строку перед родительской).
Приложения, использующие триггеры для поддержания целостности ссылок, требуют, чтобы агент слияния отправлял изменения в определенном порядке. Если агент слияния отправляет изменения в неправильном порядке, триггер, скорее всего, откатит изменение, и изменение не распространяется по всей топологии репликации.
Примечание.
Агент слияния может обходить оценку ограничения FOREIGN KEY и выполнение пользовательского триггера при использовании операций изменения SQL DML к партнерскому реплика. Чтобы это произошло, необходимо создать ограничение FOREIGN KEY и триггер пользователя (или и то, и другое) с параметром NOT FOR REPLICATION . В обоих случаях процесс слияния предполагает, что SQL Server успешно оценил бизнес-логику при выполнении исходного изменения, инициированного пользователем, в объекте, и что ему не нужно повторно оценивать эти условия при репликации данных в партнерский реплика. Основным преимуществом использования функции NOT FOR REPLICATION таким образом является повышение производительности. Дополнительные сведения о параметре NOT FOR REPLICATION и его правильном использовании см. в разделе Параметр NOT FOR REPLICATION в SQL Server 2000 электронной документации.
По двум причинам, перечисленным ранее, важен порядок, в котором агент слияния доставляет изменения в реплика партнера.
Прежде чем приступить к обсуждению порядка обработки статей, важно понимать два ключевых понятия. Ниже приведены два основных понятия:
Псевдоним статьи.
Поколение.
Ниже приведено описание этих двух концепций.
Псевдонимы статьи
Псевдоним — это целочисленное значение, которое агент слияния использует для идентификации статьи (SQL Server таблицы) для репликации слиянием. При добавлении статьи в публикацию слиянием при добавлении статьи в публикацию слиянием назначается псевдоним статьи. Если статья участвует в ограничениях DRI, процесс настройки слияния пытается создать псевдоним статьи, отражающий определенные ограничения DRI. Процесс слияния присваивает таблицам, на которые ссылается ограничение FOREIGN KEY (родитель), меньший псевдоним статьи, чем у ссылающейся таблицы (дочерней таблицы или таблицы, для которой определено ограничение FOREIGN KEY).
Если таблица не участвует в ограничениях DRI, процесс установки слияния присваивает псевдоним статьи в зависимости от порядка, в котором она добавляет статью в публикацию (по возрастанию).
Generation
Поколение — это целочисленное значение, которое агент слияния использует для отслеживания логической группы изменений в конкретной статье. Все изменения, внесенные в определенную статью на определенном реплика между синхронизациями слиянием, связаны с тем же поколением. При каждом запуске агент слияния закрывается существующее открытое поколение, а затем открывается новое поколение, с которым можно связать следующий набор изменений.
Обработка INSERT, UPDATEs и DELETEs
Агент слияния секционирует статьи для конкретной публикации на две отдельные группы:
Агент слияния помещает статьи, которые не участвуют ни в каких отношениях фильтра соединения и не связаны с помощью DRI, к статьям, участвующим в фильтрах соединения, в одну группу.
Агент слияния помещает статьи, которые явно участвуют в связях фильтров соединения, и статьи, связанные с объединением статей фильтра через DRI, во вторую отдельную группу.
Агент слияния добавляет каждую статью, определенную в публикацию, только в одну из предыдущих групп.
Агент слияния использует группы для определения общего порядка UPDATEs
обработки , INSERTs
и DELETEs
для всех статей, определенных для публикации.
В каждой из двух соответствующих групп агент слияния процессы INSERTs
и UPDATEs
в порядке псевдонимов по возрастанию статьи, а также процессы DELETEs
в порядке убывания псевдонимов статьи. Во-первых, агент слияния полностью обрабатывает все DELETEs
в определенной группе, а затем UPDATEs
и INSERTs
(также в определенной группе). Концептуально агент слияния добавляет две вышеупомянутые группы друг к другу (не объединенные) в указанном ранее порядке. Агент слияния начинается с обработки DELETEs
для первой группы, а затем распространяется DELETE
на вторую группу, а остальные изменения для двух групп обрабатываются параллельно. Хотя агент слияния поддерживает порядок обработки статей в каждой соответствующей группе, агент слияния не поддерживает строгий порядок обработки статей в двух соответствующих группах. Таким образом, в случае INSERT
или UPDATE
, возможно, что изменения из первой группы с более высоким псевдонимом статьи могут прийти впереди тех, кто из второй группы с более низким псевдонимом. В случае с может возникнуть и обратное DELETE
. Оба этих поведения являются конструктивными.
Возможные последствия пакетной обработки создания на порядок обработки статей
Как упоминалось ранее, с помощью поколения можно логически группировать изменения (INSERTs
и DELETEs
), UPDATEs
которые происходят для конкретной статьи на определенном реплика между сеансами синхронизации. В конечном счете, агент слияния работает с поколениями, когда определяет, какие изменения должны быть изменены между двумя репликами. Агент слияния согласовывает общее поколение на следующих точках процесса синхронизации:
Перед отправкой изменений от подписчика издателю.
Перед загрузкой изменений от издателя к подписчику.
Агент слияния использует это общее поколение в качестве отправной точки при перечислении поколений для отправки партнеру реплика на этапах отправки и скачивания синхронизации слиянием.
Агент слияния обрабатывает поколения пакетами, которые также называются пакетами поколений. По умолчанию в каждый пакет поколения включается 100 поколений, который агент слияния передает издателю от подписчика или загружает подписчику от издателя. Размер пакета создания можно настроить с помощью -UploadGenerationsPerBatch
параметров и -DownloadGenerationsPerBatch
агент слияния или профиля агент слияния. В случае по умолчанию, если между издателем (или повторно издателем) и подписчиком требуется обмен более 100 поколений (т. е. скачивание и отправка или и то, и другое) между издателем (или повторно издателем) и подписчиком, агент слияния обрабатывает пакеты нескольких поколений. Количество пакетов зависит от количества поколений, которыми должен обмениваться агент слияния, а также от параметров каждого пакета для определенного сеанса слияния.
В ситуации, когда происходит обмен пакетами нескольких поколений, агент слияния может разделить связанные родительские и дочерние изменения на два отдельных пакета поколения. В этом случае агент слияния может доставить дочернее изменение в пакете поколения перед пакетом создания, содержащим связанное родительское изменение. В топологиях иерархического слияния, использующих повторные издатели, существует одна из редких ситуаций, когда разделение родительских и дочерних изменений между пакетами поколений может привести к неконвергенции. Дополнительные сведения о неконвергенции см. в следующей статье:
Вы можете увеличить -UploadGenerationsPerBatch
параметры и, описанные -DownloadGenerationsPerBatch
ранее, чтобы избежать разделения родительских и дочерних изменений между пакетами поколения.
Порядок обработки статей сохраняется в определенном пакете поколения в соответствии с правилами, описанными ранее. Однако агент слияния не может поддерживать порядок обработки статей в пакетах создания.