XA 分布式事务

X/Open 定义的分布式事务接口:事务管理器通过 XA 接口协调多个资源管理器(数据库、消息中间件)的提交与回滚;跨异构资源可用,但性能与可用性成本较高。

角色事务管理器(TM)与资源管理器(RM)
典型场景同一事务内更新多个数据库或数据库与消息队列
注意XA 分支事务期间连接与锁被长期占用,跨数据中心风险更高

XA 事务轮廓(SQL 示意)

XA 事务轮廓(SQL 示意)
XA START 'tx-42';
UPDATE orders SET status = 1 WHERE id = 7;   -- 分支一
XA END 'tx-42'; XA PREPARE 'tx-42';
-- 协调完成后:XA COMMIT 'tx-42';
-- 失败路径:  XA ROLLBACK 'tx-42';
微服务场景常以 Saga 或本地消息表替代 XA;选择前评估一致性要求与故障恢复流程。

易错点

  • XA 事务期间长连接持锁,高并发下连接池迅速耗尽
  • 未处理悬挂事务与恢复流程,重启后数据不一致

数据来源与参考

  • X/Open XA 规范(1991)
  • MySQL 8.0 Reference Manual:XA Transactions
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌