原创文章,转载请注明原文链接(http://www.cnblogs.com/wingsless/p/5705314.html)

在之前的文章《InnoDB的WAL方式学习》(http://www.cnblogs.com/wingsless/p/5203064.html)里,我分析了WAL是什么,触发时机,最近刚好在看redo log方面的源码,就再次聊一聊这方面的事情吧。

一 日志写入时机

大家都知道这个参数:innodb_flush_log_at_trx_commit,该参数用于控制redo buffer中的内容写入日志的时机,一般来说分为两个部分:redo buffer写入log file;OS cache/buffer刷入磁盘。我画了一个简单的示意图:

画完这个图我有了一点困惑,因为还有一个参数:innodb_flush_method,我们平时选的都是O_DIRECT。这个参数和上面的参数是怎么样的一个关系,从参数上直接看好像这个参数是规定如何flush的,如果这样的话,上面那张图会变成什么样子?

二 Linux内核的一些鬼

于是我借了一本讲Linux内核的书,从这本书我大概知道O_DIRECT是一种文件的打开方式,即进程直接获取文件内容,不需要经过系统缓存这一步。然后我又翻看了MySQL的相关文档,文档中明确的告诉了我使用了O_DIRECT之后,数据文件会以O_DIRECT方式打开,但是还是要用fsync()函数把数据和log刷回磁盘。实际上我觉得这个参数的名字有些问题,这个参数真的不是只规定了flush的方法,还包括了文件打开的方法。于是可以画这样一张图:

这就成了上面那张图的补充版。

InnoDB还是很好玩的,最近在整理源码的学习笔记,事务日志这里还是值得写一些东西的,了解了这些基本的知识背景之后再看源码也就不是很痛苦了。

原创文章,转载请注明原文链接(http://www.cnblogs.com/wingsless/p/5705314.html)

InnoDB源码分析--事务日志(一)的更多相关文章

  1. InnoDB源码分析--事务日志(二)

    原创文章,转载请标明原文链接:http://www.cnblogs.com/wingsless/p/5708992.html 昨天写了有关事务日志的一些基本点(http://www.cnblogs.c ...

  2. InnoDB源码分析--缓冲池(三)

    转载请附原文链接:http://www.cnblogs.com/wingsless/p/5582063.html 昨天写到了InnoDB缓冲池的预读:<InnoDB源码分析--缓冲池(二)> ...

  3. spring transaction源码分析--事务架构

    1. 引言  事务特性 事务是并发控制的单元,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位.通过事务将逻辑相关的一组操作绑定在一起,以便服务器 保持数据的完整性.事 ...

  4. InnoDB源码分析--缓冲池(二)

    转载请附原文链接:http://www.cnblogs.com/wingsless/p/5578727.html 上一篇中我简单的分析了一下InnoDB缓冲池LRU算法的相关源码,其实说不上是分析,应 ...

  5. innoDB源码分析--缓冲池

    最开始学Oracle的时候,有个概念叫SGA和PGA,是非常重要的概念,其实就是内存中的缓冲池.InnoDB的设计类似于Oracle,也会在内存中开辟一片缓冲池.众所周知,CPU的速度和磁盘的IO速度 ...

  6. mybaits源码分析--事务管理(八)

    一.事务管理 写到这也快进入收尾阶段了了,在介绍MyBatis中的事务管理时不可避免的要接触到DataSource的内容,所以接下来会分别来介绍DataSource和Transaction两块内容. ...

  7. innodb 源码分析 --锁

    innodb引擎中的锁分两种 1)针对数据结构, 如链表 互斥锁 读写锁 http://mysqllover.com/?p=425 http://www.cnblogs.com/justfortast ...

  8. spring源码分析---事务篇

    上一篇我介绍了spring事务的传播特性和隔离级别,以及事务定义的先关接口和类的关系.我们知晓了用TransactionTemplate(或者直接用底层P的latformTransactionMana ...

  9. MySQL系列:innodb源码分析之内存管理

    http://blog.csdn.net/yuanrxdu/article/details/40985363 http://book.2cto.com/201402/40307.html 从MySQL ...

随机推荐

  1. FPGA中的delay与latency

    delay和latency都有延迟的意义,在FPGA中二者又有具体的区别. latency出现在时序逻辑电路中,表示数据从输入到输出有效经过的时间,通常以时钟周期为单位. delay出现在组合逻辑电路 ...

  2. PostgreSQL除法保留小数

    select round(1::numeric/4::numeric,3);结果为0.25 select round( cast ( 1 as numeric )/ cast( 4 as numeri ...

  3. Scalaz(20)-Monad: Validation-Applicative版本的Either

    scalaz还提供了个type class叫Validation.乍看起来跟\/没什么分别.实际上这个Validation是在\/的基础上增加了Applicative功能,就是实现了ap函数.通过Ap ...

  4. String类型中ToString hashCode equals compareTo等方法的经典实现

    private final char value[]; private int hash; // Default to 0 public String(String original) { this. ...

  5. ImFire即时通讯系统构建(架构)

    msgServer集群(ms) 设计作用: 该服务主要提供客户端的接入服务.每个ms维护当前接入用户的用户状态和心跳,每个ms地位是对等的. 设计考虑: ms之间不会直接交互,减少交互的复杂度.在用户 ...

  6. Android应用开发基础之十一:新特性

    Fragment 用途:在一个Activity里切换界面,切换界面时只切换Fragment里面的内容 生命周期方法跟Activity一致,可以理解把其为就是一个Activity 定义布局文件作为Fra ...

  7. Linux下Oracle重启问题

    一.切换成oracle用户 $ su - oracle 注意:不要写成“su oracle ”不然是没办法使用下面的命令的. 如下所示:将会报:command not found的错误 二.使用命令 ...

  8. Chrome 控制台console的用法

    下面我们来看看console里面具体提供了哪些方法可以供我们平时调试时使用. 目前控制台方法和属性有: ["$$", "$x", "dir" ...

  9. iOS Assigning to 'id<XXXDelegate>' from incompatible type 'BViewController *__strong'

    在使用代理的时候, BViewController *BVC = [[BViewController alloc]init]; self.delegate = BVC; 出现这样的警告Assignin ...

  10. Shapely中的几何图形操作

    Geometric Objects object.area Returns the area (float) of the object. object.bounds Returns a (minx, ...