почему транзакция XA для распределенной транзакции - PullRequest
0 голосов
/ 03 ноября 2018

Многие СУБД используют специальный протокол 2PC под названием «XA» для распределенной транзакции. Зачем кому-то использовать XA? Для меня XA не может гарантировать что-либо в случае неудачи:

В XA Менеджер транзакций (TM) скажет всем СУБД подготовиться в фазе first , и, если все будут готовы, TM скажет всем им о фиксации в секунду фаза, в противном случае, если какой-либо из них потерпит неудачу, TM скажет другим откатиться.

Если все СУБД подготовлены на первом этапе, , что если кто-то не выполнит коммит на втором этапе ? В этом случае вся транзакция потерпит неудачу, и всем остальным придется откатиться (3-я фаза?), сделав первую фазу бессмысленной . То есть первый этап не может дать никаких гарантий, даже если все СУБД, как говорят, подготовлены (хотя это увеличивает вероятность успеха).

1 Ответ

0 голосов
/ 04 ноября 2018

Хотя ваш вопрос кажется скорее теоретическим, чем практическим, но

вы правы (от https://dev.mysql.com/doc/refman/8.0/en/xa-restrictions.html)

Если произошла неожиданная остановка, когда сервер находится в середине выполнение XA ПОДГОТОВКА, XA COMMIT, XA ROLLBACK или XA COMMIT ... ONE Оператор PHASE, возможно, сервер не сможет восстановить правильный состояние, оставив сервер и двоичный журнал в несогласованном состоянии.

Но - это про MySQL и пометил этот вопрос этим :)

Если вы хотите копать глубже, я думаю, вам следует перейти к https://dba.stackexchange.com/

...