怎么理解MySQL的innodb_flush_method

技术怎么理解MySQL的innodb_flush_method这篇文章主要讲解了“怎么理解MySQL的innodb_flush_method”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一

这篇文章主要讲解了"怎么理解关系型数据库的innodb_flush_method ",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么理解关系型数据库的innodb_flush_method "吧!

官方文档描述如下:

默认情况下,InnoDB使用fsync()系统调用来刷新数据和日志文件。如果

innodb_flush_method选项设置为O_DSYNC时,innodb使用O_SYNC来打开和刷新

日志文件,以及fsync()来刷新数据文件。如果指定了O_DIRECT(在某些角马上可用/

Linux操作系统版本、FreeBSD和Solaris),InnoDBuses O _ DIRECT(或Solaris上的directio())到

打开数据文件,并使用fsync()刷新数据和日志文件。请注意,InnoDB使用

fsync()而不是fdatasync(),默认情况下它不使用O_DSYNC,因为有

它在许多种类的Unix操作系统上都有问题。

innodb_flush_method

常规3个值

1、fdatasync

2、O_DSYNC

3、氧直接

正常的访问方式

用户态缓存- 》内核态缓存- 》磁盘

按照关系型数据库的描述

1、fdatasync

InnoDB使用fsync()系统调用来刷新数据和日志文件。

请注意,InnoDB使用fsync()而不是fdatasync()

虽然关系型数据库可以使用fdatasync为参数但是实际上是调用的系统的fsync()函数,

我们可以看看Linux操作系统操作系统下FSYNC()函数的描述

fsync()传输(刷新)由引用的文件的所有已修改的核心内数据(即已修改的缓冲区缓存页面)

文件描述符软驱到磁盘设备(或其他永久存储设备),以便甚至可以检索所有已更改的信息

系统崩溃或重启后。这包括写入或刷新磁盘缓存(如果存在)。呼叫阻塞

直到设备报告传输已经完成。它还会刷新与文件相关联的元数据信息(请参见

统计(2)).

简单的说这个参数用于同步所有线程修改过的文件,而进程中的印刷电路板中记录了打开文件,他是通过文件描述符进行匹配的

在Linux操作系统操作系统内核中/usr/src/Linux-headers-3。19 .0-25-通用/包含/Linux/sched。h

有如下的印刷电路板结构体

struct task_struct { }

其中有一个文件_结构的结构体,而文件描述符就是这样一个结构体的指针

那么只要关系型数据库线程进行了刷新动作,那么他的这些文件的数据一

定会同步到磁盘
2、O_DSYNC
InnoDB uses O_SYNC to open and flush the log files, and fsync()to flush the data files
当设置为这个选项的时候,当MYSQL线程打开LOGFILE的时候使用的O_SYNC的方式,而对数据文件还是使用的fsync()
我们知道对一个文件进行读,打开是使用LINUX的
open()函数,而其中也就有这样一个选项
O_SYNC The  file  is  opened for synchronous I/O.  Any write(2)s on the resulting file descriptor will block the calling process
       until the data has been physically written to the underlying hardware.
       他描述的是如果这样打开一个文件那么在数据从内核态缓存写到了物理磁盘前,任何试图修改文件描述符的进程都会被堵塞。如此保证了日志文件
       最大的安全性
3、O_DIRECT
If O_DIRECT is specified (available on some GNU/Linux versions, FreeBSD, and Solaris), InnoDB 
uses O_DIRECT(or directio()on Solaris) to open the data files, and uses 
fsync()to flush both the data and log files.
使用这个选项MYSQL使用O_DIRECT方式打开数据文件,而fsync()会最终同步所有的数据和日志文件。
我们同样看看open()函数中关于O_DIRECT描述
O_DIRECT (Since Linux 2.4.10)
         Try to minimize cache effects of the I/O to and from this file.  In general this will degrade performance, but it is use‐
         ful  in special situations, such as when applications do their own caching.  File I/O is done directly to/from user-space
         buffers.  The O_DIRECT flag on its own makes an effort to transfer data synchronously, but does not give  the  guarantees
         of  the  O_SYNC flag that data and necessary metadata are transferred.  To guarantee synchronous I/O, O_SYNC must be used
         in addition to O_DIRECT.  
         使用这个选项一般来说会降低性能,但是在特定的情况下比如应用程序有自己的缓存机制。I/O直接来自用户态的缓存,O_DIRECT标识对大量的
         数据写有利,因为他绕开了内核态缓存,但是他并同步METADATA(这里占时理解为INODE缓存,也就是文件的基本信息比如打开时间修改时间等)
         所以要完成同步必须同时调用O_SYNC。
         如此我们也了解为什么为什么使用O_DIRECT还会调用FSYNC()我们知道FSYNC()是全同步的,LINUX上的传统的FDATASYNC()是不同步METADATA的
         如INODE缓存,进程描述缓存。但是他能够对大量的数据绕开缓存,提高性能,需要最后同步的只是DATAFILE的METADAT。

        MYSQL有自己的缓冲,这种可以使用O_DIRECT比较好

感谢各位的阅读,以上就是“怎么理解MySQL的innodb_flush_method”的内容了,经过本文的学习后,相信大家对怎么理解MySQL的innodb_flush_method这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/104197.html

(0)

相关推荐

  • centos7 k8s集群(centos7安装k8s集群)

    技术centos7系统部署k8s集群的示例分析centos7系统部署k8s集群的示例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1 版

    攻略 2021年12月15日
  • mysql如何实现查表空间大小的SQL语句

    技术mysql如何实现查表空间大小的SQL语句这篇文章将为大家详细讲解有关mysql如何实现查表空间大小的SQL语句,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

    攻略 2021年10月30日
  • 操作虚拟仿真需要什么能力(在线仿真与软件仿真的主要区别)

    技术的软件仿真和硬件仿真指的是什么本篇文章给大家分享的是有关的软件仿真和硬件仿真指的是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、软件仿真

    攻略 2021年12月24日
  • Redis的底层数据结构-跳表

    技术Redis的底层数据结构-跳表 Redis的底层数据结构-跳表跳跃表(skiplist)是一种有序数据结构,它通过在每个节点中维持多个指向其它节点的指针,从而达到快速访问节点的目的。具有如下性质:1

    礼包 2021年11月11日
  • Qt5.14与OpenCV4.5中图片的增强效果是怎样的

    技术Qt5.14与OpenCV4.5中图片的增强效果是怎样的这篇文章给大家介绍Qt5.14与OpenCV4.5中图片的增强效果是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、建立Qt工程1

    攻略 2021年11月29日
  • 抖音买1000粉多少钱,有哪个平台可以买粉丝?

    技术抖音买1000粉多少钱,有哪个平台可以买粉丝?这个抖音点赞不赚钱,网红赚的都是粉丝刷的礼物,还有网红粉丝数,只有这两种情况才赚钱。爱能让抖音直播主播人气上升,代表人气值,爱越多,证明主播人气越高。爱却无法换来金钱,只

    测评 2021年10月26日