MySQL xa 事务局限性

来源:互联网 发布:上海家博会数据 编辑:程序博客网 时间:2024/05/20 15:10
最近因为要使用MySQL的xa事务来实现分布式事务所以研究了下,发现MySQL的xa事务真心很弱。。。

关于XA 事务的介绍可以参考我之前的博客:
http://blog.sina.com.cn/s/blog_4673e6030101c7o4.html

主要的局限性为以下3点:

1. 不支持savepoint,所以当一条语句操作分区表的多个分片并出现部分成功部分失败时,分布式事务无法回滚到这条语句执行之前的状态。

2. 如果客户端和MySQL之前的连接断开(不管任何原因)或者MySQL正常关闭了,即便这个MySQL实例的分布式状态已经是xaprepare了,它也照样被回滚。
    也就是说:
   a.如果连接断开或MySQL正常关闭,那么XA的调度程序将永远无法commit这个事务了。
    b.如果xacommit时连接断开或MySQL正常关闭,那么你将无从得知事务是真的被提交了还是被回滚了。

3. 如果分布式事务达到prepare状态,这时MySQL异常关闭了,那么在MySQL恢复之后,XA调度程序还可以继续xacommit这个事务,但这个xa commit的事务是不会记录binlog的。
    也就说会主从数据不一致。

总的感觉就是MySQL这个xa支持实在太弱了,用XA不就是为了出现突发状况的时候保证数据的一致性吗?
有这些个限制,只要出现突发状况,基本上肯定数据不一致,真的很鸡肋啊!

转载请注明转自高孝鑫的blog
0 0
原创粉丝点击