「这是我参与2022首次更文挑战的第20天,活动详情查看:2022首次更文挑战」。
在数据库中,有一个主要的概念:事务。本文将介绍 XA 事务的概念,以及 MySQL 中的 XA 事务的类型和常见用处。
事务
事务(Transaction)是一个操作序列。这些操作要么都做,要么都不做。事务正确执行的四要素是 ACID,即原子性、一致性、隔离性和持久性。
XA 事务
XA(eXtended Architecture)是指由 X/Open 组织提出的分布式交易处理的规范。XA 是一个分布式事务协议,所以,分布式事务也称为 XA 事务。
XA 协议主要定义了事务管理器(Transaction Manager, TM)和资源管理器(Resource Manager, RM)之间的接口。其中事务管理器作为全局的调度者,负责各个本地资源的提交和回滚,需要和参与全局事务的所有资源管理器进行通信;资源管理器提供访问事务资源的方法,通常一个数据库就是一个资源管理器。
XA 事务的缺点是性能不佳,且 XA 无法满足高并发场景。
XA 事务的分类
在 MySQL 中,XA 事务有两种,内部 XA 事务和外部 XA 事务。
MySQL 本身的插件式架构导致在其内部需要使用 XA 事务,此时 MySQL 即是协调者,也是参与者。内部XA事务发生在存储引擎与插件之间或者存储引擎与存储引擎之间。例如,不同的存储引擎之间是完全独立的,因此当一个事务涉及两个不同的存储引擎时,就必须使用内部 XA 事务。最为常见的内部 XA 事务存在于二进制日志(Binlog)和InnoDB存储引擎之间。
外部XA事务就是一般的分布式事务。MySQL支持 XA START/END/PREPARE/COMMIT
这些SQL语句,通过使用这些命令可以完成分布式事务的状态转移。MySQL 在执行分布式事务(外部XA事务)的时候,MySQL 服务器相当于 XA 事务资源管理器,与 MySQL 连接的客户端相当于事务管理器。外部 XA 事务可以用在分布式数据库代理层,实现对 MySQL 数据库的分布式事务支持。