同一个mysql实例,A库和B库在同一个事务中
- 首先要确保mysql开启XA事务支持
SHOW VARIABLES LIKE ‘%XA%’;
- 如果innodb_support_xa的值是ON就说明mysql已经开启对XA事务的支持了,
如果不是就执行:
SET innodb_support_xa = ON;
-
XA(在shardingjdbc叫柔性事务)的性能很低。一个数据库的事务和多个数据库间的XA事务性能对比可发现,性能差10倍左右。
-
分布式事务原理:分段式提交
分布式事务通常采用2PC协议,全称Two Phase Commitment Protocol。该协议主要为了解决在分布式数据库场景下,所有节点间数据一致性的问题。
分布式事务通过2PC协议将提交分成两个阶段:
prepare;commit/rollback
阶段一为准备(prepare)阶段。即所有的参与者准备执行事务并锁住需要的资源。参与者ready时,向transaction manager报告已准备就绪。
阶段二为提交阶段(commit)。当transaction manager确认所有参与者都ready后,向所有参与者发送commit命令。
如下图所示: