17.9.3 Операции изменения данных
Поскольку нет первичных серверов (источников) для какого-либо набора данных, каждый сервер в группе может выполнять транзакции в любое время, даже транзакции, которые изменяют состояние (транзакции RW).
Любой сервер может выполнить транзакцию без предварительной координации. Однако во время подтверждения он координирует действия с остальными серверами в группе, чтобы принять решение о судьбе этой транзакции. Эта координация служит двум целям: (i) проверить, следует ли подтвердить транзакцию; (ii) и распространить изменения, чтобы другие серверы могли также применить транзакцию.
Поскольку транзакция передается по атомарному каналу, либо все серверы в группе получают транзакцию, либо ни один. Если они ее получают, то все получают ее в одном и том же порядке по отношению к другим транзакциям, которые были отправлены ранее. Обнаружение конфликтов выполняется путем проверки и сравнения наборов записей транзакций. Таким образом, они обнаруживаются на уровне строк. Разрешение конфликтов подчиняется правилу «первый подтвердивший выигрывает». Если t1 и t2 выполняются одновременно на разных узлах, потому что t2 упорядочена перед t1, и обе изменили одну и ту же строку, то t2 выигрывает конфликт, а t1 прерывается. Другими словами, t1 пыталась изменить данные, которые были сделаны устаревшими транзакцией t2.
Если две транзакции часто конфликтуют, то рекомендуется запускать их на одном и том же сервере. Тогда у них есть возможность синхронизироваться на локальном менеджере блокировок вместо прерывания позже в протоколе репликации.
© 2025 Oracle
Licensed under the GPLv2 License.