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)
InnoDB源码分析--事务日志(一)的更多相关文章
- InnoDB源码分析--事务日志(二)
原创文章,转载请标明原文链接:http://www.cnblogs.com/wingsless/p/5708992.html 昨天写了有关事务日志的一些基本点(http://www.cnblogs.c ...
- InnoDB源码分析--缓冲池(三)
转载请附原文链接:http://www.cnblogs.com/wingsless/p/5582063.html 昨天写到了InnoDB缓冲池的预读:<InnoDB源码分析--缓冲池(二)> ...
- spring transaction源码分析--事务架构
1. 引言 事务特性 事务是并发控制的单元,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位.通过事务将逻辑相关的一组操作绑定在一起,以便服务器 保持数据的完整性.事 ...
- InnoDB源码分析--缓冲池(二)
转载请附原文链接:http://www.cnblogs.com/wingsless/p/5578727.html 上一篇中我简单的分析了一下InnoDB缓冲池LRU算法的相关源码,其实说不上是分析,应 ...
- innoDB源码分析--缓冲池
最开始学Oracle的时候,有个概念叫SGA和PGA,是非常重要的概念,其实就是内存中的缓冲池.InnoDB的设计类似于Oracle,也会在内存中开辟一片缓冲池.众所周知,CPU的速度和磁盘的IO速度 ...
- mybaits源码分析--事务管理(八)
一.事务管理 写到这也快进入收尾阶段了了,在介绍MyBatis中的事务管理时不可避免的要接触到DataSource的内容,所以接下来会分别来介绍DataSource和Transaction两块内容. ...
- innodb 源码分析 --锁
innodb引擎中的锁分两种 1)针对数据结构, 如链表 互斥锁 读写锁 http://mysqllover.com/?p=425 http://www.cnblogs.com/justfortast ...
- spring源码分析---事务篇
上一篇我介绍了spring事务的传播特性和隔离级别,以及事务定义的先关接口和类的关系.我们知晓了用TransactionTemplate(或者直接用底层P的latformTransactionMana ...
- MySQL系列:innodb源码分析之内存管理
http://blog.csdn.net/yuanrxdu/article/details/40985363 http://book.2cto.com/201402/40307.html 从MySQL ...
随机推荐
- Delphi QC 记录
各网友提交的 QC: 官方网址 说明 备注 https://quality.embarcadero.com/browse/RSP-12985 iOS device cannot use indy id ...
- Java中使用Jedis操作Redis
使用Java操作Redis需要jedis-2.1.0.jar,下载地址:http://files.cnblogs.com/liuling/jedis-2.1.0.jar.zip 如果需要使用Redis ...
- node.js图片上传
1.node-formidable 对文件上传提供帮助的组件 2.app.js var formidable = require('formidable'); var http = require( ...
- mysql hang and srv_error_monitor_thread using 100% cpu
昨天晚上,运维过来说有台生产服务器的mysql cpu一直100%,新的客户端登录不了,但是已经在运行的应用都正常可用. 登录服务器后,top -H看了下,其中一个线程的cpu 一直100%,其他的几 ...
- SPRING SECURITY 拦截静态资源
情景: <security:intercept-url pattern="/**" access="USER"/> 当在spring securti ...
- python爬虫技术的选择
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Helvetica } span.s1 { } 本篇文章不是入门帖,需要对python和爬虫领 ...
- web性能优化——代理(nginx)
简介 一个很好的原则是调优时每次只个性一个配置.如果对配置的个性不能提高性能的话,改回默认值 优化必须要通过性能测试.不能意淫,需要前后对比,真实说明问题. 场景 优化nginx. 确保每次请求控制一 ...
- Trumbowyg - 轻量的 WYSIWYG 编辑器
Trumbowyg 是一个轻量,可定制的 jQuery 所见即所得(WYSIWYG)的编辑器插件.美丽的设计,生成语义化代码,带有功能强大的 API .编辑器和生成的代码进行了优化以支持 HTML5. ...
- Lazyr.js – 延迟加载图片(Lazy Loading)
Lazyr.js 是一个小的.快速的.现代的.相互间无依赖的图片延迟加载库.通过延迟加载图片,让图片出现在(或接近))视窗才加载来提高页面打开速度.这个库通过保持最少选项并最大化速度. 在线演示 ...
- 关于SharPoint2013一点细节的深究
在进行SharePoint2013的开发过程中我发现在开启了某些功能,或者说是创建了个人站点之后有很多地方变了比如下面这个地方: 当然相应的URL地址也发生改变.也许很明确的我就打开了Welc ...