Mysql事务

事务

事务就是一组原子性的SQL查询,或许说一个独立的工作单元。

ACID

  • 原子性(atomicity)

    一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚。

  • 一致性(consistency)

    数据库总是从一个一致性的状态转换到另外一个一致性的状态。

  • 隔离性(isolation)

    通常来说,一个事务所做的修改在最终提交以前,对其他事务是不可见的。

  • 持久性(durability)

    一旦事务提交,则其所做的修改就会永久保存到数据库中。

分布式XA 事务

存储引擎的事务特性能够保证在存储引擎级别实现ACID,而分布式事务则让存储引擎级别的ACID可以扩展到数据库层面,甚至可以扩展到多个
数据库之间。

XA事务是一种在多个服务器之间同步数据的方法。存储引擎提交数据的时,需要将数据写入二进制日志,这种方式就是一个分布式事务。

XA 事务为MySQL带来巨大的性能下降。因为一个事务如果开启了二进制日志,则不仅需要对二进制日志进行持久化操作,
InnoDB事务日志还需要两次日志持久化操作。换句话说,如果希望有二进制日志安全的事务实现,帽至少需要做三次fsync()
操作。可将innodb_support_xa 设置为0关闭二进制日志。但这样的设置是非常不安全的,而且这会导致Mysql复制无法正常
工作。sync_binlog设置为1时,存储引擎和二进制日志才是真正的同步。

外部XA事务

MySQL能够作为参与者完成一个外部的分布式事务,但它对XA协议支持并不完整,如:XA协议要求在一个事务中的多个连接可以做关联
但目前的MySQL版本还不能支持。

posted @ 2018-01-08 15:53  六飞.卡尔  阅读(87)  评论(0)    收藏  举报