mysql fsync_用一分钟了解: fsync这个系统调用!

mysql fsync_用一分钟了解: fsync这个系统调用!1前言不要诧异在MySQL专题中突然插入fsync系统调用,因为马上就要和大家分享MySQL的undolog、redolog、binlog了,在分享这些文章的时候会经常说fsync这个名词,所以提前来看下。2缓冲传统的UNIX实现的内核中都设置有缓冲区或者页面高速缓存,大多数磁盘IO都是通过缓冲写的。当你想将数据write进文件时,内核通常会将该数据复制到其中一个缓冲区中,如果该缓冲没被写满…

大家好,又见面了,我是你们的朋友全栈君。

1前言

不要诧异在MySQL专题中突然插入fsync系统调用,因为马上就要和大家分享MySQL的undo log、redo log、bin log了,在分享这些文章的时候会经常说fsync这个名词,所以提前来看下。

2缓冲

传统的UNIX实现的内核中都设置有缓冲区或者页面高速缓存,大多数磁盘IO都是通过缓冲写的。

当你想将数据write进文件时,内核通常会将该数据复制到其中一个缓冲区中,如果该缓冲没被写满的话,内核就不会把它放入到输出队列中。

当这个缓冲区被写满或者内核想重用这个缓冲区时,才会将其排到输出队列中。等它到达等待队列首部时才会进行实际的IO操作。

为了方便理解,你可以回想一下你擅长使用的编程语言操作文件时,总会贴心的为你提供一个write()方法还有一个flush()方法。

f2b5ca5b9ef657d0d40df1dca89c989c.png

这里的输出方式就是大家耳熟能详的:延迟写

这个缓冲区就是大家耳熟能详的:OS Cache

3延迟写的优点

很明显、延迟写降低了磁盘读写的次数,但同时也降低了文件的更新速度。

这样当OS Crash时由于这种延迟写的机制可能会造成文件更新内容的丢失。而为了保证磁盘上的实际文件和缓冲区中的内容保持一致,UNIX系统提供了三个系统调用:sync、fsync、fdatasync

4sync、fsync、fdatasync

#includeint fsync(int filedes);int fdatasync(int filedes);int sync();

sync系统调用:将所有修改过的缓冲区排入写队列,然后就返回了,它并不等实际的写磁盘的操作结束。所以它的返回并不能保证数据的安全性。通常会有一个update系统守护进程每隔30s调用一次sync。命令sync(1)也是调用sync函数。

fsync系统调用:需要你在入参的位置上传递给他一个fd,然后系统调用就会对这个fd指向的文件起作用。fsync会确保一直到写磁盘操作结束才会返回,所以当你的程序使用这个函数并且它成功返回时,就说明数据肯定已经安全的落盘了。所以fsync适合数据库这种程序。

fdatasync系统调用:和fsync类似但是它只会影响文件的一部分,因为除了文件中的数据之外,fsync还会同步文件的属性。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/138300.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月31日 下午5:46
下一篇 2022年5月31日 下午5:46


相关推荐

  • css实现返回顶部,实现返回顶部效果

    css实现返回顶部,实现返回顶部效果实现的效果如下可以点击它返回到首页去html部分title=”返回顶部”>css部分.layui-fixbar{position:fixed;right:15px;bottom:15px;z-index:999999;right:50px;bottom:50px;height:50px;list-style:none;}.layui-fixbar.layui-fixba…

    2022年7月13日
    168
  • Ubuntu中取消秘钥环

    Ubuntu中取消秘钥环1.打开应用程序->附件->密码和加密密钥(或者在终端中输入seahorse)2.切换到密码选项卡,会看到一个密码密钥环3.右击->更改密码,然后在“旧密码”中填入系统登录密码,其他不用填,直接确定,并选择“使用不安全的存储器”,这样就可以去掉默认密钥环的密码了。

    2022年7月21日
    18
  • 实用技巧——小问题的一些解决办法

    收集一些遇到的小问题,并分享解决方案!

    2022年2月25日
    54
  • windows10和安装linux双系统安装教程(超简单)[通俗易懂]

    windows10和安装linux双系统安装教程(超简单)[通俗易懂]windows10和安装linux双系统安装教程(超简单)一共分三步:第一步了解自己电脑的BIOS第二步安装windows10系统第三步在windows10中安装ubuntu系统第一步了解自己电脑的BIOSUEFI:是新式BIOS,只要是近几年买的都是这个BIOSMBR:是传统BIOS,上世纪买的电脑基本都是老的了解自己电脑的类型电脑类型BIOS和硬盘组合常见的有如下几种:UEFI(是新式BIOS)+单硬盘UEFI(是新式BIOS)+双硬盘(SSD

    2022年7月24日
    8
  • 代码形象——javadoc注释规范

    代码形象——javadoc注释规范javadoc 注释规范备注 本文结合了许多篇文章的内容加上自己的理解和经验 将很多零散的知识点 总结和统一整理与此 你必须写注释而且按照项目规范来的写注释的理由 javadoc 注释规范就是指文档注释 包括类 接口 方法 属性等的说明 在一个团队项目开发中 统一规范的注释很重要 对于自己以后的查看源码也极有帮助 如果没有相应的注释 那么给团队合作 自己查看源代码都会带来非常大的

    2026年3月19日
    2
  • Java虚拟机简介

    Java虚拟机简介JVM概念● JVM是JavaVirtualMachine(Java虚拟机)的缩写,是JRE的一部分。它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java虚拟机JVM是属于JRE的,而现在我们安装JDK时也附带安装了JRE(当然也可以单独安装JRE)。● JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码)

    2022年7月8日
    22

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号