Chinaunix首页 | 论坛 | 认证专区 | 博客 登录 | 注册

一路向前!deadhorse.blog.chinaunix.net

从事Oracle架构设计、SQL优化、MySQL维护工作。qq:463725310;我的站点:www.dbhelp.net

  • 博客访问: 1729484
  • 博文数量: 208
  • 博客积分: 2413
  • 博客等级: 大尉
  • 技术积分: 3025
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-01 22:07
  • 认证徽章:
个人简介

作者:十字螺丝钉。多年Oracle、MySQL数据库架构设计、管理及维护经验。擅长SQL优化、排错等。 我的站点:www.dbhelp.net

文章分类

全部博文(208)

文章存档

2017年(7)

2016年(35)

2015年(16)

2014年(25)

2013年(25)

2012年(56)

2011年(44)

微信关注

IT168企业级官微



微信号:IT168qiye



系统架构师大会



微信号:SACC2013

订阅
热词专题
innodb_flush_method理解 2016-08-19 17:17:57

分类: Mysql/postgreSQL

innodb_flush_method这个参数控制着innodb数据文件及redo log的打开、刷写模式,对于这个参数,文档上是这样描述的:

有三个值:fdatasync(默认),O_DSYNC,O_DIRECT

默认是fdatasync,调用fsync()去刷数据文件与redo log的buffer

为O_DSYNC时,innodb会使用O_SYNC方式打开和刷写redo log,使用fsync()刷写数据文件

为O_DIRECT时,innodb使用O_DIRECT打开数据文件,使用fsync()刷写数据文件跟redo log

首先文件的写操作包括三步:open,write,flush

上面最常提到的fsync(int fd)函数,该函数作用是flush时将与fd文件描述符所指文件有关的buffer刷写到磁盘,并且flush完元数据信息(比如修改日期、创建日期等)才算flush成功。

使用O_SYNC方式打开redo文件表示当write日志时,数据都write到磁盘,并且元数据也需要更新,才返回成功

O_DIRECT则表示我们的write操作是从mysql innodb buffer里直接向磁盘上写

至此我再总结一下三者写数据方式:

fdatasync模式:写数据时,write这一步并不需要真正写到磁盘才算完成(可能写入到操作系统buffer中就会返回完成),真正完成是flush操作,buffer交给操作系统去flush,并且文件的元数据信息也都需要更新到磁盘。

O_DSYNC模式:写日志操作是在write这步完成,而数据文件的写入是在flush这步通过fsync完成

O_DIRECT模式:数据文件的写入操作是直接从mysql innodb buffer到磁盘的,并不用通过操作系统的缓冲,而真正的完成也是在flush这步,日志还是要经过OS缓冲

参考: 

http://www.orczhou.com/index.php/2009/08/innodb_flush_method-file-io/

mysql手册

转载自 http://www.ruzuojun.com/topic/813.html

阅读(6404) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

十字螺丝钉2016-08-22 20:33:50

转载的文章被推荐不是我的本意,希望chinaunix不要推荐转载的文章

评论热议
请登录后评论。

登录 注册