【问题标题】:why XA transaction for distributed transaction为什么 XA 事务用于分布式事务
【发布时间】:2018-11-03 12:21:22
【问题描述】:

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

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

如果所有 DBMS 都在第一阶段准备好,如果有人在第二阶段提交失败怎么办?在这种情况下,整个事务将失败,所有其他事务都必须回滚(第三阶段?),使第一阶段毫无意义。也就是说,第一阶段不能保证所有的DBMS都准备好了(不过确实增加了一些成功的可能性)。

【问题讨论】:

  • 请将您的问题集中在一件事上。您当前的问题有点模糊且过于广泛;您的问题的标题似乎也没有涵盖您的问题的主体:将它们排成一行。
  • 无论如何,您的前提是错误的,分布式事务要求准备足以使提交成功,如果不是,则资源无法正确参与分布式事务。只有资源不可用可能是一个问题(但必须有一种方法可以恢复,以便最终可以完成提交)。
  • @MarkRotteveel 已编辑。

标签: mysql transactions xa


【解决方案1】:

虽然你的问题似乎比实际更理论,但是

你是对的(来自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/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 2018-08-13
    • 1970-01-01
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多