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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Script:Datafile Report

    Script:Datafile Report

    2021年7月27日
    63
  • 雪崩效应 (密码学术语)

    雪崩效应 (密码学术语)雪崩效应(密码学术语)雪崩效应就是一种不稳定的平衡状态也是加密算法的一种特征,它指明文或密钥的少量变化会引起密文的很大变化,就像雪崩前,山上看上去很平静,但是只要有一点问题,就会造成一片大崩溃。可以用在很多场合对于Hash码,雪崩效应是指少量消息位的变化会引起信息摘要的许多位变化。这个概念有点类似于蝴蝶效应。蝴蝶效应,说的是,指在一个动力系统中,初始条件下微小的变化能带动整个系统的长期的巨大的连锁反应。说的是极少的变化引发的大变化。雪崩效应在服务器应用系统中,也同样存在,如…

    2022年7月13日
    26
  • pycharm 删除项目_ios隐藏的已购项目怎么删除

    pycharm 删除项目_ios隐藏的已购项目怎么删除PyCharm彻底删除项目直接删除源文件,删不干净,会留下一些文件1、点击File,选择CloseProject2、关闭项目之后,会弹出一个选择项目的界面,点击你想要删除的项目右边的叉3、然后找到该项目所在的路径,选中该项目的文件,“Shift+Delete”(永久删除,不放入回收站)就OK了路漫漫其修远兮,吾将上下而求索。核心关键:python实战是检验学习效果的唯一…

    2022年8月29日
    5
  • GIT、GITLAB、GITHUB、GITLIB[通俗易懂]

    GIT、GITLAB、GITHUB、GITLIB[通俗易懂]Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Github-一个网站,提供给用户空间创建git仓储,保存用户的一些数据文档或者代码等作为开源代码库以及版本控制系统,Github目前拥有140多万开发者用户。随着越来越多的应用程序转移到了云上

    2025年5月31日
    3
  • 终于懂了TCP和UDP协议区别[通俗易懂]

    终于懂了TCP和UDP协议区别[通俗易懂]终于懂了TCP和UDP协议区别

    2022年6月7日
    32
  • 安卓的日历_公认不卡的安卓手机

    安卓的日历_公认不卡的安卓手机一款安卓日历,包含周日历、月日历以及滑动切换视图

    2022年4月19日
    35

发表回复

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

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