原创文章,转载请注明原文链接(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. Delphi iOS 开启文件共享 UIFileSharingEnabled

    Apple 在 iOS 提供了文件共享(FileSharing)功能,让 App 有一个对外窗口的目录,透过 iTunes 可以任意管理这个目录的文档内容(可拖入文档,也能将文档拖出备份). 如果 A ...

  2. C语言的关键字,运算符,标识符

    关键字 数据类型修饰相关 auto按照自动的方式进行变量的存储 const定义常量或常参数 extern声明外部变量或函数 register指定变量的存储类型是寄存器变量 static指定变量的存储类 ...

  3. 解析XML

    1.解析String类型的XML字符串得到属性值 String  resultXML = "<?xml version="1.0" encoding="U ...

  4. mysql批量插入数据的基类

    自己设计的一个mysql数据库批量添加数据的基类.用于批量向mysql数据库添加数据,子类实现起来很简单,自测性能也还不错. 1.基类实现-BatchAddBase using System.Coll ...

  5. Redis-复制

    Redis 的复制 (replication) 是一种使用和配置起来非常简单的主从(master-slave)复制,允许 Redis 从服务器成为主服务器的精确副本.以下是关于 Redis 复制的一些 ...

  6. Eclipse的SVN插件提示:验证验证位置时发生错误:"Unable to load default SVN Client“解决

    这个原因是你的机器上没有 JAVAHL 这个包, 这个是另外的一个开源组件, 所以, 在trigis的svn插件发行版里面没有这个东西,下载装上就是, 这个包在不同的系统上, 有不同的情况...详情见 ...

  7. Riot - 比 Facebook React 更轻量的 UI 库

    Riot 是一个类似 Facebook React 的用户界面库,只有3.5KB,非常轻量.支持IE8+浏览器的自定义标签,虚拟 DOM,语法简洁.Riot 给前端开发人员提供了除 React 和 P ...

  8. iOS:JSON格式字符串转字典,字典转JSON格式字符串

    在iOS开发中,和服务器交互中,经常用到字典和JSON格式字符串相互转换. 代码如下: 1.JSON格式字符串转字典 + (NSDictionary *)dictionaryWithJsonStrin ...

  9. oracle中Window和Window Group

    参考文献: http://www.5ienet.com/note/html/scheduler/oracle-scheduler-using-window.shtml window概念 此Window ...

  10. JAVA内部类使用

    一.什么是内部类? 一个类的定义放在另一个类的内部,这个类就叫做内部类 二.内部类有那些特性? 1.内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名 ...