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


相关推荐

  • apap图像拼接_20张以上多图拼图软件

    apap图像拼接_20张以上多图拼图软件整理一下APAPimagestitching的代码:项目地址:https://cs.adelaide.edu.au/~tjchin/apap/其中MDLT是两张图片的拼接,调试过程基本很简单,不再赘述;对于BAMDLT多图拼接代码,现将出现的问题及解决办法整理如下:BAMDLT使用依赖三个库,分别是EIGEN,Google’sCeressolver,GLOG其中EIGEN…

    2022年9月23日
    2
  • 用java web实现聊天室_java web实现简单聊天室「建议收藏」

    用java web实现聊天室_java web实现简单聊天室「建议收藏」目标servlet、jsp实现简单聊天室,用户通过浏览器登录后进入聊天室,可发送消息进行群聊,点击聊天信息框中的用户名可实现拍一拍功能。基础知识数据的存取setAttribute/getAttributerequest请求对象:有效时间短ServletContext上下文对象:一直存在于服务器,存储公有、共享数据Session会话对象:独立网站默认页面一般是index.jsp实现思路1….

    2022年6月22日
    42
  • TortoiseSVN新人使用指南[通俗易懂]

    TortoiseSVN新人使用指南[通俗易懂]这篇文章源于6月份给公司新人作的关于SVN使用的培训,转眼已经过了几个月的时间,丢了也怪可惜的,于是整理出来希望能够帮助后来人快速入门。安装说明使用说明检出项目导入项目提交更新查看日志版本回滚版本控制总结安装说明开发人员强烈建议使用IDE中的SVN插件更加智能与人性化。首先安装SVN客户端,windows一般选择乌龟客户端https://tortoisesvn.net/d

    2022年5月3日
    47
  • 关于QMap的几点总结思考

    关于QMap的几点总结思考关于QMap的几点总结思考题记:前段时间集中精力写了数据的分拣算法,用到了容器QMap和QMultiMap。回头再来回去该算法的时候,又觉得当时好像不是自己写的一样,于是有必要将QMap类来总结一下。首先来了解下C++中STL中的map:map是STL的一个关联容器,它提供一对一的hash。特点:第一个可以称为关键字(key),每个关键字只能在map中出现一次;第二个可能称为该关键字的值(value);map以模板(泛型)方式实现,可以存储任意类型的数据,包括使用者自定义的数据类型。M

    2022年5月30日
    41
  • aop动态代理机制有哪些_aop和动态代理的关系

    aop动态代理机制有哪些_aop和动态代理的关系这里的AOP指的是面向切面编程思想,而不是SpringAOP。AOP(AspectOrientProgramming),我们一般称为面向方面(切面)编程,作为面向对象的一种补充,用于处理系统中分布于各个模块的横切关注点,比如事务管理、日志、缓存等等。AOP实现主要分为静态代理和动态代理。-静态代理主要是`AspectJ`-动态代理主要是`SpringAOP`

    2022年10月9日
    3
  • GridLayout详解

    GridLayout详解GridLayoutGridLayout是一个非常强大的布局管理器,它可以实现很多复杂的布局,名字中暗示它将所有控件放置在类似网格的布局中.^__^GridLayout有两个构造函数.GridLayout的构造函数构造函数描述publicGridLayout()建立一个默认的GridLayout布局.publicGridLayout(intnumCo…

    2022年6月6日
    35

发表回复

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

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