MySQL技术内幕Innodb存储引擎 七 事务

事务的分类

  • 扁平事务(最常见)
  • 带有保存点的扁平事务
  • 链事务
  • 嵌套事务
  • 分布式事务

事务的实现

redo

基本概念
  • 用来保证事务的原子性和持久性,通常记录的是页的物理修改操作,是物理日志
  • 当用来实现事务的持久性时,由两部分组成:
    • 内存中的redo log buffer(易失的) ;redo log file(持久的)
  • 基本上是顺序写的
  • 存放在重做日志文件中
LSN
  • 表示事务写入重做日志的字节的总量,其单位是字节,占用8个字节
  • 见p303
  • 不仅记录再重做日志中,还存在于每个页中,LSN表示该页最后刷新时LSN的大小
  • 用来控制重做日志刷新到磁盘的策略,0,1,2。其中默认是1,表示事务提交时必须调用一次fsync操作。其他的两种见p295

undo

  • 用来保证事务的一致性,根据每行记录进行记录
  • 需要进行随机读写,用来帮助事务回滚及MVCC的功能
  • 由purge线程判断是否删除undo log及undo log所在页
  • undo log的格式:
    • insert undo log:指在insert操作中产生的undo log,因为insert操作的记录,只对事务本身可见,对其他事务不可见(这是事务隔离性的要求),因此undo log可以在事务提交后直接删除,不需要进行purge操作。
    • update undo log:记录的是对delete和update操作产生的undo log。该undo log可能需要提供MVCC机制,因此不能在事务提交时就进行删除

binlog

  • 用来进行POINT-IN-TIME的恢复以及主从复制环境的建立
  • 是再Mysql数据库的上层产生的,是一种逻辑日志,记录的是对应的SQL语句,只在事务提交完成后进行一次写入
  • 存放在数据库内部的一个特殊段中,即undo 段,位于共享表空间内

group commit

  • 在mysql5.6之前,group commit和binlog的多repulication存在冲突 ,基本上有副本的都没有做到group commit,是由于prepare_commit_mutex锁
  • mysql 5.6 使用 Binary Log Group Commit的方式,在Mysql数据库上层进行提交时首先按顺序将其放入一个队列中,队列中的第一个事务称为leader,其他事务称为follower,leader控制着follower的行为。一共有三个阶段,分别是flush阶段、sync阶段、Commit阶段
  • 见p322

事务控制语句

  • 在存储过程中,只能使用START TRANSACTION语句来开启一个事务
  • 见p323

对于事务操作的统计

  • 计算TPS的方法是:(com_commit + com_rollback) /time 【利用这种方法进行计算的前提:所有的事务都是显式提交的,不会计算隐式的,即不会计算autocommit】
  • SHOW GLOBAL STATUS LIKE ‘com_commit’;

事务的隔离级别

  • 打算把锁部分看完 在看这个 ~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值