Spec-Zone.ru › MySQL 5.7

17.9.3 Операции изменения данных

Поскольку нет первичных серверов (источников) для какого-либо набора данных, каждый сервер в группе может выполнять транзакции в любое время, даже транзакции, которые изменяют состояние (транзакции RW).

Любой сервер может выполнить транзакцию без предварительной координации. Однако во время подтверждения он координирует действия с остальными серверами в группе, чтобы принять решение о судьбе этой транзакции. Эта координация служит двум целям: (i) проверить, следует ли подтвердить транзакцию; (ii) и распространить изменения, чтобы другие серверы могли также применить транзакцию.

Поскольку транзакция передается по атомарному каналу, либо все серверы в группе получают транзакцию, либо ни один. Если они ее получают, то все получают ее в одном и том же порядке по отношению к другим транзакциям, которые были отправлены ранее. Обнаружение конфликтов выполняется путем проверки и сравнения наборов записей транзакций. Таким образом, они обнаруживаются на уровне строк. Разрешение конфликтов подчиняется правилу «первый подтвердивший выигрывает». Если t1 и t2 выполняются одновременно на разных узлах, потому что t2 упорядочена перед t1, и обе изменили одну и ту же строку, то t2 выигрывает конфликт, а t1 прерывается. Другими словами, t1 пыталась изменить данные, которые были сделаны устаревшими транзакцией t2.

Примечание

Если две транзакции часто конфликтуют, то рекомендуется запускать их на одном и том же сервере. Тогда у них есть возможность синхронизироваться на локальном менеджере блокировок вместо прерывания позже в протоколе репликации.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/group-replication-data-manipulation-statements.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API