博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
innodb_flush_method理解【转】
阅读量:5304 次
发布时间:2019-06-14

本文共 883 字,大约阅读时间需要 2 分钟。

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.ruzuojun.com/topic/813.html

转载于:https://www.cnblogs.com/gomysql/p/3656825.html

你可能感兴趣的文章
Unity 3(二):Unity在AOP方面的应用
查看>>
java执行命令行
查看>>
在UGUI上显示3D模型,并限制范围的拖拽
查看>>
android TranslateAnimation 顶部segment分段移动动画
查看>>
搞站思路 <陆续完善中>
查看>>
T-SQL查询进阶--理解SQL Server中索引的概念,原理以及其他
查看>>
最短路算法笔记
查看>>
MySQL数据库重要知识点
查看>>
笔记本共享无线上网
查看>>
跨域请求的常用方式及解释
查看>>
hdu 1568 Fibonacci
查看>>
cocos2dx-js 的配置和安装
查看>>
python learning OOP1.py
查看>>
sql语句注意事项
查看>>
[转]如何把别人项目代码修改后 提交到github
查看>>
通俗理解docker
查看>>
Redis发布订阅和应用场景
查看>>
微软BI 之SSAS 系列 - 多维数据集中度量值设计时的聚合函数 (累加性_半累加性和非累加性)...
查看>>
thinkphp5的控制器调用自身模块和调用其他模块的方法
查看>>
钻牛角尖の根据时间计算周次
查看>>