为什么将XA交易用于分布式交易

时间:2018-11-03 12:21:23

标签: mysql transactions xa

许多DBMS使用称为“ XA”的特殊2PC协议进行分布式事务。为什么有人要使用XA?对于我来说,XA不能保证万一发生故障:

在XA中,事务管理器(TM)会告诉所有DBMS在第一阶段中进行准备,如果准备就绪,TM会告诉他们所有在中进行提交第二阶段,否则如果其中任何一个失败,TM会告诉其他人回滚。

如果所有DBMS在第一阶段都已准备好,如果第二阶段有人未提交怎么办?在这种情况下,整个交易将失败,而所有其他交易将不得不回滚(第三阶段?),使第一阶段变得毫无意义。也就是说,即使据说所有DBMS都已准备就绪,第一阶段也不能保证任何(尽管确实增加了成功的可能性)。

1 个答案:

答案 0 :(得分:0)

尽管您的问题似乎比理论上的更实际,但

您是对的(来自https://dev.mysql.com/doc/refman/8.0/en/xa-restrictions.html

  

如果服务器处于中间位置而意外停止   执行XA PREPARE,XA COMMIT,XA ROLLBACK或XA COMMIT ... ONE   PHASE语句,服务器可能无法恢复到正确的状态   状态,使服务器和二进制日志处于不一致状态。

但是-那是关于MySQL的,并用这个标记了这个问题:)

如果您想更深入地研究,我认为您应该跳到https://dba.stackexchange.com/