mysql innodb_flush_method 参数的各种取值及其影响

MySQL的InnoDB存储引擎通过innodb_flush_method参数控制数据和日志文件的刷新方式。默认使用fsync,而O_DIRECT选项可能在某些Unix系统上存在问题。O_DSYNC和O_DIRECT_NO_FSYNC选项涉及不同级别的同步操作,其中O_DSYNC避免了不必要的文件元数据刷新。此外,O_DIRECT在某些系统上可用,但可能不被支持。最新观察表明,在非Windows系统上,配置为O_DIRECT或O_DIRECT_NO_FSYNC时,写入双写缓冲区不会触发flush操作。
摘要由CSDN通过智能技术生成

innodb_flush_method 用来控制innodb的redo日志文件和data数据文件采用何种flush方法。类unix/linux操作系统的取值为:fsync/0 ,O_DSYNC/1, littlesync/2 ,nosync/3 ,O_DIRECT/4 ,O_DIRECT_NO_FSYNC/5。默认取值fsync ;windows操作系统下的取值为: unbuffered/0 , normal/1 。默认值unbuffered

先看看官方文档的说明:
fsync
 or 0InnoDB uses the fsync() system call to flush both the data and log files. fsync is the default setting. innodb使用fsync()系统调用刷新数据和日志文件;
O_DSYNC
 or 1InnoDB uses O_SYNC to open and flush the log files, and fsync() to flush the data files. InnoDB does not use O_DSYNC directly because there have been problems with it on many varieties of Unix. innodb使用O_SYNC flag打开并刷新日志文件,并且使用fsync()系统调用刷新数据文件。innodb没有将O_DSYNC作为默认值使用,因为在有一些变种unix系统上,O_DSYNC实现的有问题;
littlesync
 or 2: This option is used for internal performance testing and is currently unsupported. Use at your own risk.截至目前8.0.22版本,仅作内部测试用;
nosync
 or 3: This option is used for internal performance testing and is currently unsupported. Use at your own risk.截至目前8.0.22版本,仅作内部测试用;
O_DIRECT
 or 4InnoDB uses O_DIRECT (or directio() on Solaris) to open the data files, and uses fsync() to flush both the data and log files. This option is available on some GNU/Linux versions, FreeBSD, and Solaris.  innodb使用O_DIRECT flag(或者在Solaris系统上使用directio()系统调用)打开数据文件,并且使用fsync()系统调用刷新数据和日志文件。
O_DIRECT_NO_FSYNC
InnoDB uses O_DIRECT during flushing I/O, but skips the fsync() system call after each write operation.innodb使用O_DIRECT打开文件,但是在写操作之后跳过使用fsync()系统调用刷新。
unbuffered
 : InnoDB uses simulated asynchronous I/O and non-buffered I/O.innodb使用仿真的异步和非缓存io;
normal
 or 1InnoDB uses simulated asynchronous I/O and buffered I/O.innodb使用仿真的异步和缓存io;

这里主要说unix/linux操作系统。

上面列出的所有的刷新参数,涉及到4个系统调用open(),write(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值