为了账号安全,请及时绑定邮箱和手机立即绑定

innodb_flush_method

标签:
Java

1,参数解释:innodb_flush_method这个参数控制着innodb数据文件及redo log的打开、刷写模式;

      对于这个参数,文档上是这样描述的:有三个值:fdatasync(默认),O_DSYNC,O_DIRECT

2,  3种模式也数据工作方式:

webp

3,结论:

(1) 在类unix操作系统中,文件的打开方式为O_DIRECT会最小化缓冲对io的影响,该文件的io是直接在用户空间的buffer上操作的,并且io操作是同步的,因此不管是read()系统调用还是write()系统调用,数据都保证是从磁盘上读取的;所以IO方面压力最小,对于CPU处理压力上也最小,对物理内存的占用也最小;但是由于没有操作系统缓冲的作用,对于数据写入磁盘的速度会降低明显(表现为写入响应时间的拉长),但不会明显造成整体SQL请求量的降低(这有赖于足够大的innodb_buffer_pool_size)。

(2) O_DSYNC方式表示以同步io的方式打开文件,任何写操作都将阻塞到数据写入物理磁盘后才返回。这就造成CPU等待加长,SQL请求吞吐能力降低,insert时间拉长。

(3) fsync(int filedes)函数只对由文件描述符filedes指定的单一文件起作用,并且等待写磁盘操作结束,然后返回。fdatasync(int filedes)函数类似于fsync,但它只影响文件的数据部分。而除数据外,fsync还会同步更新文件的元信息到磁盘。

默认datasync模式,整体表现较好,因为充分利用了操作系统buffer和innodb_buffer_pool的处理性能,但带来的负面效果是free内存降低过快,最后导致页交换频繁,磁盘IO压力大,这会严重影响大并发量数据写入的稳定性。也就是说拥有了高性能,但不会有高稳定性。为了解决这个问题,可以有个折中的办法,定时的对操作系统进行echo 3 >/proc/sys/vm/drop_caches,清理一下OS缓存,可以及时回收一部分内存(回收顺间对性能会有所影响)。

O_DIRECT模式网上一些评论认为是性能最好的,但本次测试的结果来看,性能并不是很高,但是稳定性确实比较高,在大并发量读写操作中,能够较长时间运行,只是在第一次启动系统后测试,该模式一开始的响应时间确实比较长,到后面才恢复到较低



作者:严国华
链接:https://www.jianshu.com/p/0bc2d8f4bba1


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消