共计 1069 个字符,预计需要花费 3 分钟才能阅读完成。
因为事务操作的数据通常跨多个物理节点,在分布式数据库中,相似计划即称为分布式事务。
TDSQL MySQL 版 反对一般分布式事务协定和 XA 分布式事务协定。TDSQL MySQL 版(内核 5.7 或以上版本)默认反对分布式事务,且对客户端通明,像应用单机事务一样不便。
TDSQL MySQL 版 分布式事务采纳两阶段提交算法(2PC)保障事务的原子性(Atomicity)和一致性(Consistency),隔离级别配置为 Read committed、Repeatable read 或 Serializable。
一般分布式事务
begin; # 开启事务
… # 跨 set 的增删改查等非 DDL 操作
commit; # 提交事务
XA 分布式事务
XA 分布式事务是指跨实例的事务:
xa begin ”; # 开启 XA 事务,事务标识由零碎外部生成,因而传入空字符串
… # 跨 set 的增删改查等非 DDL 操作
select gtid(); # 获取以后 XA 事务的标识,上面假设为 ’xid’
xa prepare ‘xid’; # 筹备事务
xa commit/rollback ‘xid’; # 提交或回滚事务
新增事务接口
select gtid():获取以后分布式事务的全局惟一标识。如果为空,则该事务不是分布式事务。
一般分布式事务标识的格局为:‘网关 id’-‘proxy 随机值’-‘序列号’-‘工夫戳’-‘分区号’,例如 c46535fe-b6-dd-595db6b8-25。
XA 分布式事务标识的格局为:‘ex’-‘网关 id’-‘proxy 随机值’-‘序列号’-‘工夫戳’-‘分区号’,例如 ex-c46535fe-b6-dd-595db6b8-25。
select gtid_state(“以后分布式事务的全局惟一标识”):在事务提交异样之后(默认 3 秒后)用来获取事务的状态。可能的后果有:
COMMIT:标识该事务曾经或者最终会被提交。
ABORT:标识该事务最终会被回滚。
空:因为事务的状态会在一个小时之后革除,因而有以下两种可能:
一个小时之后查问,标识事务状态曾经革除,
一个小时以内查问,标识事务最终会被回滚。
xa boost‘以后分布式事务的全局惟一标识’:一般事务提交(commit)发送异样之后,事务在一段时间内(默认 30 秒)由后盾组件主动提交或者回滚掉。如果用户不违心期待这么长的工夫,能够重复调用该接口,促使零碎及时地提交或回滚掉事务。该接口会返回事务的状态,即提交或者回滚。
xa lockwait:显示以后分布式事务的期待关系。用户能够通过 dot 工具,将其转化为图片。
xa show:显示以后 proxy 上处于沉闷状态的事务。