读《MySQL技术内幕 InnoDB存储引擎》 学习总结 第七章 事务

7.1 认识事务

概述

作用:

事务会把数据库从一种一致状态转化为另一种一致状态。这事务模型区分文件系统的重要特征之一。

事务必须同时满足ACID特性:

原子性 automicity   取款,要么都做要么都不做。

一致性 consistency  更改姓名,事务修改数据的前后没有破坏数据库的完整性约束。

隔离性 isolation    要求事务提交前对其他事务不可见,通常这使用锁来实现。 粒度锁策略:允许事务仅锁住一个实体对象的子集,以此来提高事务之间的并发度。

持久性 durability  指事务一旦提交,所有的变化都是永久的。即使发生宕机现象,也能将数据恢复。

分类

扁平事务  体现事务的原子性,要么都操作要么都回滚。不足:不能提交或者回滚事务的一部分,例如:从中国转机印度飞去意大利。

带有保存点的扁平事务   保存点:用来通知系统应该记住事务当前的状态,以便于发生错误时,事务能回到保存点当时的状态

链事务   解决当系统崩溃时,保存点易失、非持久的缺点。在提交一个事务时释放不需要的数据对象,将必要的处理上下文隐式的传给下一个事务。提交事务操作和开始下一个事务操作合并成一个原子操作。即,只能恢复到最近一个保存点。

嵌套事务   处于根节点的事务称为顶层事务,其他事务称为子事务。

分布式事务   在ATM机(节点A)进行跨行转账操作,B行转到 C行。

A发出转账命令—— B执行余额值减去999——c执行余额增加999——A通知用户操作成功/失败

7.2 事务的实现

redo

重做日志 用来实现事务的一致性。记录的是物理操作日志,每个事务对应多个日志条目,并且事务的重做日志写入是并发的,并非在事务提交时写入,是无序的。

重做日志块 log block     以块的形式进行缓冲,512字节。

重做日志组  log group 是一个逻辑概念,由多个重做日志文件组成。

重做日志恢复 

undo

数据库利用 undo信息进行回滚。undo存放在共享表空间的undo段中。

undo是逻辑日志,只是将数据库逻辑恢复到原来的样子,所有修改都被逻辑取消。但是这不是页本身的回滚。举个例子,用户执行来一个插入操作,会使表空间变大,当=逻辑回滚时表空间大小不会缩小。InnoDB存储引擎回滚时,会完成一个delete操作,是表空间复原。

为什么需要逻辑回滚呢?因为在多用户并发系统中可能有数百数千个并发事务,不能影响其他事务正常工作。

MVCC   当用户读取一行记录时,若该记录被其他事务占用,用户可以通过undo读取之前的版本信息,以此实现非锁定读取。

注意:undo也会产生redo log。

undo存储管理

undo log格式     

查看undo信息 

purge

是否可以删除该条记录通过purge来判断: 所有删除/更新事务不能在事务提交时进行处理,这时其他事务可能在引用这一行。

group commit

fsync操作: 等待写磁盘操作结束后返回。

详情略。

7.3 事务控制语句

start transaction | gegin 显式的开启一个事务

commit  rollback

7.4 隐式提交的SQL语句

7.5 对于事务操作的统计

每秒事务的处理能力  TPS

7.6 事务的隔离级别

read uncommitted. 出现脏读,读到另一个事务未提交的数据

read committed  出现不可重复读,一个事务内两次读取的数据不一致

repeatable read  幻读 ,第一次读发现没有,第二次又读到来。

serializable  最严格的隔离级别,所有事务按照次序依次执行。

7.7 分布式事务

指的是允许多个独立的事务资源参与到一个全局的事务中去。全局事务要求在其中的所有事务要么都提交要么都回滚。

银行转账。

MYSQL数据库分布式事务

内部XA事务

7.8 不好的事务习惯

在循环中提交

InnoDB在循环中会自动提交。

使用自动提交

作者认为,应用程序开发时最好把事务的控制权限交给开发人员,在程序端进行事务的开始或结束。

使用自动回滚

无法得知错误的原因

7.9 长事务

顾名思义:执行时间较长的事务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值