事务是指构成单一逻辑工作单元的操作的集合。数据库系统维护事务的ACID四个特性:

  • 原子性:事务的所有操作在数据库中要么全部反映,要么全部不反映。
  • 一致性:事务执行前后数据库保持约束一致性和业务逻辑一致性。
  • 隔离性:在事务并发执行时,各个事务都感觉不到其他事务的存在。
  • 持久性:事务一旦提交,其更改是永久性的,即使数据库系统崩溃也能恢复。

先从持久性说起。

持久性

保证持久性的策略就是Write Ahead Logging。在事务提交之前,备份一份事务的操作日志在磁盘上,备份成功再允许事务成功提交。

InnoDB引擎中支持持久性的是redo log,redo log写入过程如图所示:

redo log的写入为顺序循环写入。默认有两个redo log文件,InnoDB顺序写其中一个,写满之后,再顺序写另外一个日志文件,再回过头来写第一个…循环往复。

既然重复利用redo log文件,就涉及到确定哪些日志可以被覆写的问题,InnoDB引擎利用CheckPoint技术来解决这个问题。

CheckPoint

在深入理解InnoDB引擎–存储结构与文件中介绍了LSN记录了页的版本,CheckPoint用以表示已经刷新至磁盘的页的版本,在CheckPoint之前的事务已经持久化在磁盘上,redo log可以被覆写重用。

在事务的执行过程中,由于缓存的缘故,有些页被修改后(脏页)并没有立刻被刷新至磁盘,但是事务提交成功了(redo log已经记录完毕)。

那么什么时候刷新缓存中的脏页到磁盘呢?主要有以下三种情况:

  • 周期性刷新:Master Thread周期性刷新一定脏页到磁盘
  • 缓存不够用:基于LRU的缓存不够用,需要刷新一定脏页给新的热点页腾出位置
  • redo log不够用:checkpoint_age高出async_water_mark/sync_water_mark,刷新一定脏页到磁盘以保证redo log有足够的空间给后来事务覆写

其他问题

redo log文件大小问题

redo log 不能太大也不能太小:redo log日志太大,将会导致大量脏页驻留内存而未被刷新至磁盘,系统故障恢复时将需要更多的时间。redo log日志太小,日志文件切换频率和发生CheckPoint的频率随着升高,导致性能抖动。

redo log写入“深度”

innodb_flush_log_at_trx_commit参数控制着redo log的写入策略:

参数值 commit写入位置 性能与可靠性
0 内存里的redo log buffer,最终等待Master Thread刷新回磁盘 性能最好,可靠性最差,数据库系统故障则发生事务丢失
1 磁盘,调用fsync直接刷新至磁盘 性能最差,可靠性最好,不会发生事务丢失
2 磁盘缓存,最终等待宿主机文件系统刷新回磁盘 性能中等,可靠性中等,数据库系统故障但是宿主机操作系统不故障则不会发生事务丢失

MySQL技术内幕 InnoDB存储引擎 第2版

InnoDB引擎--事务持久性相关推荐

  1. 谈谈MySQL InnoDB存储引擎事务的ACID特性

    2019独角兽企业重金招聘Python工程师标准>>> 1.前言 狼哥一直对数据库Mysql这块没有进行过系统的深入学习,今天看到一篇文章写的还不错,特意分享一下,我不能保证文章中所 ...

  2. binlog关闭事务记录_Mysql 数据库 InnoDB引擎对binlog_format的限制

    前言 我们都知道binlog_format为STATEMENT在一些场景下能够节省IO.加快同步速度,但是对于InnoDB这种事务引擎,在READ-COMMITTED.READ-UNCOMMITTED ...

  3. 浅析Mysql InnoDB存储引擎事务原理

    浅析Mysql InnoDB存储引擎事务原理 大神:http://blog.csdn.net/tangkund3218/article/details/47904021

  4. MySQL innodb引擎,事务提交 commit 异常,但数据提交成功

    昨天线上服务出现的奇怪的异常,数据库中数据已经提交(都是innodb引擎), 但是java代码抛出异常,并从日志分析是commit异常,最后在catch中的rollback都为时已晚. 这次的异常可与 ...

  5. Mysql-innoDB存储引擎(事务,锁,MVCC)

    innoDB的特性: 从图中由上至下红色框中的信息是:基于主键的聚集索引 ,数据缓存,外键支持(逻辑上建立外键),行级别锁,MVCC多版本控制,事务支持.这些也是InnoDB最重要的特性. 事务: 数 ...

  6. mysql数据库1对n_MySQL数据库InnnoDB引擎事务说明

    前言 本篇文章主要讲诉数据库中事务的四大特性(ACID)以及事务的隔离级别划分. 数据库事务及其特性 事务是指满足ACID特性的一组操作,可以通过 Commit 提交一个事务,也可以使用 Rollba ...

  7. Mysql优化系列(1)--Innodb引擎下mysql自身配置优化

    1.简单介绍 InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎.InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读.这些特 ...

  8. Mysql技术内幕innodb引擎笔记

    第2章 InnoDB存储引擎 2.3 InnoDB体系架构 InnoDB存储引擎有多个内存块,可以认为这些内存块组成了一个大的内存池,负责如下工作: 维护所有进程/线程需要访问的多个内部数据结构. 缓 ...

  9. Mysql技术-innodb引擎-笔记

    第2章 InnoDB存储引擎 2.3 InnoDB体系架构 InnoDB存储引擎有多个内存块,可以认为这些内存块组成了一个大的内存池,负责如下工作: 维护所有进程/线程需要访问的多个内部数据结构. 缓 ...

  10. [数据库03]-约束(唯一性-主键-外键/存储引擎/事务/索引/视图/DBA命令/数据库设计三范式

    [数据库03]-约束(唯一性-主键-外键)/存储引擎/事务/索引/视图/DBA命令/数据库设计三范式 一.约束 1.1 唯一性约束(unique) 1.2 主键约束 1.3 外键约束 二.存储引擎 2 ...

最新文章

  1. xshell virt-manager RuntimeError: could not open display
  2. SAP 自定义 Table 中的小陷阱
  3. 应该算是在说 delphi 的日志框架吧
  4. [ZT]firefox实现ie的方法和属性)
  5. java mvc web_JavaWeb MVC
  6. NodeJs开发框架fortjs
  7. sklearn——决策树基础概念
  8. 《HTML CSS JavaScript 网页制作从入门到精通 第3版》—— 2.8 其他标记
  9. 01-C语言之父:丹尼斯·里奇
  10. jedis的hscan方法使用方法
  11. OPT液态镜头上市,视觉检测实现瞬时对焦
  12. 【OS】Process Scheduling Synchronization
  13. C#-调用OCR组件识别图片文字
  14. 虚拟机ping通主机,但是ping不通百度
  15. 优质的计算机软件著作权,计算机软件著作权登记后会公开吗?
  16. matlab中 randperm()的用法
  17. 微信支付——扫码支付模式二
  18. 大包回转台液压滑环的应用
  19. lansee无法双击进去计算机,局域网査看工具LanSee的使用教程
  20. AWS SDK 访问阿里云 OSS

热门文章

  1. Java在后台获取USB二维码扫描枪扫描的内容
  2. 此处纸薄不经墨,待入章中再续貂
  3. GPRS使用AT指令发短信拨号
  4. 记一次失败的git截图工具使用经历——shareX
  5. Python爬网易云音乐的那些事
  6. iOS 通过商品短链接跳转京东商品详情页
  7. Google收购Urchin
  8. 翡翠手链的寓意是什么?要如何保养它才好!
  9. Seaborn系列(二):关系绘图
  10. Python基础学习(2)基本数据类型、三元运算、深浅拷贝、函数式编程、参数、变量、lambda表达式、python内置函数、文件处理、上下文管理、递归、命名空间、闭包