zoukankan      html  css  js  c++  java
  • InnoDB源码分析--事务日志(一)

         原创文章,转载请注明原文链接(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)

  • 相关阅读:
    TSYS2.0 碎片工作原理
    回旋。悲哉、哀哉
    Sql高级操作
    你是我最愛的人
    TSYS2.0标签说明
    TSYS:Tkl_TemplateClass 类调用详解
    CMS设计和CMS选型(内容管理系统)
    TSYS2.0 Beta与Tsys 1.1等众多版本下载
    TsysV1.1 系统文件清单介绍
    伪装成Google Bot突破收费页面
  • 原文地址:https://www.cnblogs.com/wingsless/p/5705314.html
Copyright © 2011-2022 走看看